3

我有带有字段id,和 的文档表sender_idreceiver_id并且receiver_id包含字符串值,例如U12,U13,U14现在我当前登录用户,我想查找所有receiver_id包含我的user_id意思的记录 my user_idis U13。现在如何编写查询来获取记录。

我的查询是:

$selDoc="SELECT * FROM documents WHERE sender_id='U".$_SESSION['userId']."' OR  "U".$_SESSION['userId']." IN (receiver_id) ORDER BY id DESC";

但我在“where 子句”中收到错误未知列“U13”

4

2 回答 2

4

您的字符串连接搞砸了,应该是:(进一步简化

$selDoc="SELECT * FROM documents WHERE 'U".$_SESSION['userId']."' IN (senderID,receiver_id) ORDER BY id DESC";

当上面的语句被解析时,它将如下所示:

SELECT * 
FROM   documents 
WHERE  'UXX' IN (senderID,receiver_id)  // where XX is the userID
ORDER  BY id DESC

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-04-20T06:05:17.543 回答
1

你错过了那里的报价。此外,您应该考虑在查询中使用绑定变量(将要查找的值分配给变量,然后在查询中使用占位符)以避免 SQL 注入问题(如果您不知道那是什么,请查一下,这非常重要要知道!)

于 2013-04-20T06:07:11.673 回答