2011-03-26 5 views
1

s'il vous plaît aidez-moi au sujet de cette requête:clause where jointure interne requête

function viewServices($userpno) 
{ 
    echo $userpno; 

    $this->query = " 
SELECT task.employee_id , task.user_id , task.service_id, service.name AS servicename , 
     service.description AS servicedescription, employee.name AS employeename, employee.pic_path AS employeepicture, 
     employee.pic_path 
FROM task where task.user_id = '$userpno' 
INNER JOIN employee ON employee.pno = task.employee_id 
INNER JOIN user ON user.pno = task.user_id 
INNER JOIN service ON service.service_id = task.service_id 
"; 
} 

La requête fonctionne parfaitement sans:

WHERE task.user_id = '$userpno' 

J'ai essayé de cette façon aussi:

WHERE task.user_id = $userpno 

Mais cela ne fonctionne pas.

L'erreur est:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\wamp\www\admin\classes\Task.php on line 22 

S'il vous plaît me quide comment puis-je mettre la clause WHERE.

+0

Saviez-vous ce que vous faites ici est une attaque potentielle d'injection SQL? Vous * devez * envoyer la valeur userpno via mysql_real_escape_string. Voir http://php.net/manual/fr/function.mysql-real-escape-string.php et http://en.wikipedia.org/wiki/SQL_injection. –

+0

@ François Beausoleil Nous ne savons pas exactement d'où vient $ userpno, donc nous ne pouvons pas le dire avec certitude. Peut-être que cette fonction est passée directement par les ID utilisateur d'un autre résultat de requête. Mais si sa valeur provient d'une manière ou d'une autre de l'entrée de l'utilisateur, vous avez absolument raison. – Wiseguy

Répondre

2

Essayez:

$this->query = "SELECT task.employee_id , task.user_id , task.service_id, 
service.name AS servicename ,service.description AS servicedescription, 
employee.name AS employeename, employee.pic_path AS employeepicture,employee.pic_path 
FROM task 
INNER JOIN employee ON employee.pno = task.employee_id 
INNER JOIN user ON user.pno = task.user_id 
INNER JOIN service ON service.service_id = task.service_id 
where task.user_id = '$userpno'"; 
+0

np à tout moment bro :) – waqasahmed

2

Vous avez des clauses JOIN après votre clause WHERE. Ce n'est pas valide, donc votre requête renvoie false car elle a échoué.

Pour référence, les parties d'une requête SELECT doivent être dans l'ordre/format tel que décrit dans les documents ici: http://dev.mysql.com/doc/refman/5.0/en/select.html

7

clause WHERE va à la fin de la requête

SELECT task.employee_id , task.user_id , task.service_id, service.name AS servicename ,service.description AS servicedescription, employee.name AS employeename, employee.pic_path AS employeepicture,employee.pic_path 
FROM task 
INNER JOIN employee ON employee.pno = task.employee_id 
INNER JOIN user ON user.pno = task.user_id 
INNER JOIN service ON service.service_id = task.service_id 
where task.user_id = '$userpno' 
+0

vous êtes bienvenu – Dalen

3

structure de requête est la suivante: SELECT, FROM (rejoint ici), où

vous aviez WHERE trop tôt

$this->query = 
    "SELECT task.employee_id , task.user_id , task.service_id, service.name AS servicename ,service.description AS servicedescription, employee.name AS employeename, employee.pic_path AS employeepicture,employee.pic_path 
    FROM task INNER JOIN employee ON employee.pno = task.employee_id INNER JOIN user ON user.pno = task.user_id INNER JOIN service ON service.service_id = task.service_id 
    WHERE task.user_id = '$userpno'"; 

Les requêtes qui exécutent correctement retourner une ressource, ceux qui ne parviennent pas retourner false

+0

pas de problème ....... –

Questions connexes