我有這樣的MySQL查詢:MySQL的「與」給我的錯誤
$querynotis = "SELECT * FROM notifications WHERE pid = " . $_SESSION['sess_id'] . " AND read = 0";
,它給我的錯誤;
您的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法使用近1行
「讀= 0」如果我刪除了該手冊:
AND read = 0
部分,它完美的罰款。我可以做錯什麼?
我有這樣的MySQL查詢:MySQL的「與」給我的錯誤
$querynotis = "SELECT * FROM notifications WHERE pid = " . $_SESSION['sess_id'] . " AND read = 0";
,它給我的錯誤;
您的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法使用近1行
「讀= 0」如果我刪除了該手冊:
AND read = 0
部分,它完美的罰款。我可以做錯什麼?
READ
是一個保留關鍵字,恰好是您的列的名稱。爲了避免語法錯誤,列名應該使用反引號進行轉義。當然,
$pid = $_SESSION['sess_id'];
$querynotis = "SELECT * FROM notifications WHERE pid = $pid AND `read` = 0";
的另一種方式,而不是反引號轉義它:
$pid = $_SESSION['sess_id'];
$querynotis = "SELECT * FROM notifications n WHERE pid = $pid AND n.read = 0";
如果您有權限更改表,更改列名不在保留關鍵字列表上,以防止同樣的錯誤再次回到未來。
作爲旁註,查詢是用SQL Injection
脆弱,如果變量的值(小號)從外部來了。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements
你可以擺脫使用單引號圍繞值。
謝謝,不知道。我馬上編輯列名。這些變量不是來自外部的,所以我不會在SQL注入時遇到麻煩。儘管感謝您的領導。 – 2013-05-11 16:24:05
不客氣':)' – 2013-05-11 16:24:33
使用此查詢,您要使用mysql的保留關鍵字。 READ是預留關鍵字。使用反引號運算符
$querynotis = "SELECT * FROM notifications WHERE pid = " . $_SESSION['sess_id'] . " AND `read` = '0'";
謝謝你的迴應!幫助我很多:) – 2013-05-11 16:25:37
酷快樂編碼 – 2013-05-11 16:33:41
在嘗試執行查詢之前輸出'$ querynotis'的值;你可能會注意到一些事情。 – mustaccio 2014-05-02 20:36:01
[由於在MySQL中使用保留字作爲表或列名稱而導致的語法錯誤]的可能重複(http://stackoverflow.com/questions/23446377/syntax-error-due-to-using-a-reserved-word -as-a-table-or-column-name-in-mysql) – 2014-05-06 10:05:06