2009-11-07 76 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