2013-02-21 82 views
-1

這簡直太瘋狂了。似乎沒有什麼是錯誤的:這個mysql查詢看起來有什麼問題嗎?

$q_messages = $db->query("SELECT `messages`.`MessageID`, `messages`.`MsgDate`, `messages`.`MsgStatus`, " . 
       "`messages`.`Subject`, `messages`.`Message`, CONCAT(users.LastName, ', ', users.FirstName) SenderName " . 
       "FROM `messages` " . 
       "INNER JOIN `users` ON `messages`.`Sender` = `users`.`UserID` " . 
       "WHERE (`messages`.`Recipient`=$userid)"); 

以下錯誤將查詢結果被拋出:

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 '\', \', users.FirstName) SenderName FROM `messages` INNER JOIN `users` ON `messa' at line 

我也試着更換「」與\「 \」中的CONCAT功能,但這並沒有解決它。 順便說一句,如果我刪除concat函數的第二個參數,它的工作原理如下:

PS。我在phpmyadmin中運行了查詢,並且它工作正常!

這是echo的sql。對不起,我剛開始並沒有意識到你的意思:D

SELECT `messages`.`MessageID`, `messages`.`MsgDate`, `messages`.`MsgStatus`, `messages`.`Subject`, `messages`.`Message`, CONCAT(users.LastName, ', ', users.FirstName) SenderName FROM `messages` INNER JOIN `users` ON `messages`.`Sender` = `users`.`UserID` WHERE (`messages`.`Recipient`=30) 
+2

你可以提供圍繞這個的代碼或者顯示導致錯誤的回顯SQL嗎? – Popnoodles 2013-02-21 14:23:30

+2

在大多數情況下,打印「生成的」SQL將立即向您顯示出現了什麼問題。 – 2013-02-21 14:28:14

+0

'$ userid'是空白的? – 2013-02-21 14:28:49

回答

0

在評論中,你說$db是一個自定義的Database對象。它的query方法可能會轉義傳遞給它的字符串,這會導致它轉義', '左右的引號,從而破壞語法。

0

一種可能性是$userid的值。例如,如果它是一個字符串,那麼它應該被引號包圍。

此外,在提供此類查詢時,最好顯示正在發送的實際SQL。也就是在參數替換之後。

+0

該列的整數。它需要引號嗎? – 2013-02-21 14:35:20

+0

@ user1691367。 。 。不,但你應該檢查實際傳入的值。 – 2013-02-21 14:38:41

0

試試這個CONCAT:

CONCAT(users.LastName, ' , ', users.FirstName) as SenderName 

我測試了它,並能正常工作;)

PS:儘量Concat的查詢的VAR,如:

$query = "select * from my_table"; 
$q_messages = $db->query($query); 

這樣你可以做一個回聲$查詢,看看發生了什麼;)

+0

非常感謝Rocket Hazmat,$ db正在逃避查詢。這是我在早期項目中使用的一個類,我剛剛重用了它。 – 2013-02-21 14:40:09

+0

@ user1691367:這不是我的答案。 – 2013-02-21 14:46:34

+0

我知道,但是因爲我在這裏陳述了你的答案,所以我想省卻你再次發帖的麻煩。感謝您的幫助 – 2013-02-21 18:08:58