我的文档表包含字段id
,sender_id
,receiver_id
和receiver_id
包含字符串值,如 U12,U13,U14 现在我目前已登录用户,我想查找receiver_id
包含user_id
}的所有记录,表示我的user_id
为U13
。现在如何编写查询以获取记录。
我的查询是:
$selDoc="SELECT * FROM documents WHERE sender_id='U".$_SESSION['userId']."' OR "U".$_SESSION['userId']." IN (receiver_id) ORDER BY id DESC";
但我在'where子句'
中收到错误未知列'U13'答案 0 :(得分: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
作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。
答案 1 :(得分:1)
你在那里错过了一句话。此外,您应该考虑在查询中使用绑定变量(分配值以查找变量,然后在查询中使用占位符)以避免SQL注入的问题(如果您不知道那是什么,请查找它,这是非常重要的要知道!)