2009-11-07 7 views
0

Quelqu'un peut-il me dire ce qui se passe ici. Je ne sais pas pourquoi ce code ne fonctionne pas et lancer l'erreur suivante:Erreur de syntaxe SQL - PHP/MySQL

You have an error in your SQL syntax, check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND role != 7 AND role != 4' at line 3

$sql = 'SELECT * FROM tblusers 
       INNER JOIN permissions on tblusers.usrID = permissions.user_id 
       WHERE permissions.team_id='.$team_id.' AND role != 7 AND role != 4'; 

    require("connection.php"); 

    $result = mysql_db_query($DBname,$sql,$link) or die(mysql_error()); 

    while($row = mysql_fetch_assoc($result)) 
    { 
     $message->addTo($row['usrEmail'], $row['usrFirst'] . ' ' . $row['usrLast']); 
    } 

Je sais que la variable team_id de $ fonctionne bien, parce que si je « l'écho », ça marche bien. Des idées sur ce que je fais mal ici? Merci!

+2

Essayez faisant écho à la variable $ sql, qui est généralement un très bon moyen de déboguer ces types d'erreurs. – Tjofras

Répondre

4

echo out $sql, essayez l'instruction dans la base de données ou collez-la ici pour pouvoir la déboguer. J'ai d'abord soupçonné que vous aviez besoin de citations autour de la variable, mais vous ne l'avez probablement pas fait depuis son numéro.

Est-ce que les deux tables ont une colonne row ou est-ce qu'une seule table en possède?

+0

écho out $ sql aidé. $ team_id était en fait vide, parce que j'avais oublié que ma requête avait lieu dans une fonction, et que la variable n'était pas incluse dans la fonction. Merci. – Dodinas

3

Je reçois ce message d'erreur exact si $team_id est vide - êtes-vous sûr que c'est réglé à ce point dans le code?

+1

Vous avez raison aussi, Martin. Lisez mon commentaire sur la réponse de meder. +1 pour le bon conseil. – Dodinas

1

En utilisant instructions préparées vous pouvez éviter les problèmes de citations.

$dbConn = new mysqli("127.0.0.1", "username", "password", "db"); 
$stm = $dbConn->prepare("SELECT * FROM tblusers WHERE team_id = ?"); 
$stm->bind_param("i", $team_id); /* 'i' for an integer */ 
$stm->execute(); 
1

champ rôle est ambigu essayer tblusers.role