这个mysql查询看起来有什么问题?

时间:2013-02-21 14:19:02

标签: php 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中运行了查询,它运行了!

这是回声的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)

3 个答案:

答案 0 :(得分:0)

一种可能性是$userid的价值。例如,如果它是一个字符串,那么它应该用引号括起来。

此外,在提供此类查询时,最好显示实际发送的SQL。也就是说,在参数替换之后。

答案 1 :(得分:0)

试试这个结论:

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

我测试过并且工作正常;)

PS:尝试在var中连接查询,例如:

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

通过这种方式,您可以对$ query进行回显,看看发生了什么;)

答案 2 :(得分:0)

在评论中,您说$db是自定义Database对象。它的query方法可能会转义传递给它的字符串,这会导致它转义', '周围的引号,从而破坏了语法。