2009-11-07 91 views
0

任何人都可以告诉我这里发生了什么。我不知道为什么这个代码不工作,并抛出以下错误: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']); 
    } 

我知道变量$ TEAM_ID工作正常,因为如果我“回声”,它的工作原理精细。我在这里做错了什么想法?谢谢!

+2

尝试呼应$ SQL变量,通常是调试这些类型的错误的一个很好的办法。 – Tjofras 2009-11-07 00:46:01

回答

4

echo out $sql,尝试数据库中的语句或将其粘贴到此处,以便我们可以对其进行调试。我最初怀疑你需要引用变量,但是你可能不知道它是一个数字。

这两个表有row列还是只有一个表有它?

+0

呼应$ sql帮助。 $ team_id实际上是空的,因为我忘记了我的查询发生在一个函数中,并且变量未包含在函数中。谢谢。 – Dodinas 2009-11-07 00:54:30

3

如果$team_id为空,我会得到确切的错误信息 - 您确定它已设置在代码中的该位置吗?

+1

你说得对,马丁。阅读我对meder答案的评论。 +1的好建议。 – Dodinas 2009-11-07 00:55:03

1

通过使用准备好的语句您可以避免报价问题。

$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

角色字段是模糊的尝试tblusers.role