我有一个数组$friends
,我用$friend_new = join(',',$friends);
得到name1,name2,name3
。 但是,当我使用此查询我得到错误:MySQL IN for strings
$query = mysqli_query($connect_db, "SELECT * FROM post WHERE name IN ($friend_new)");
有谁知道问题出在哪里?
我有一个数组$friends
,我用$friend_new = join(',',$friends);
得到name1,name2,name3
。 但是,当我使用此查询我得到错误:MySQL IN for strings
$query = mysqli_query($connect_db, "SELECT * FROM post WHERE name IN ($friend_new)");
有谁知道问题出在哪里?
您应该使用implode("','", $friends)
和IN ('$friends_new')
,因为这些是字符串值。
您的代码很容易被注入。你应该使用正确的参数化查询PDO/mysqli
+1是唯一提及SQL注入并提示PDO的人。 – Asaph 2013-04-26 22:55:37
列表中的样子:
... IN ('friend1','friend2','friend3')
如果你有朋友如数组:
$friends = array("friend1","friend2","friend3");
可以使用implode
以备今后使用与IN
:
$friend_new = "'" . implode("','", $friends) . "'";
最后,
SELECT * FROM post WHERE name IN ($friend_new)
你这样做的单个字符串不会被引用,并导致错误。随着加入允许你指定一个“胶水”超过1个字符,你可以做如下:
$query = mysqli_query($connect_db,
"SELECT * FROM post " .
"WHERE name IN ('".join("', '", $friends)."') ";
或
$friend_new = join("', '", $friends);
$query = mysqli_query($connect_db,
"SELECT * FROM post " .
"WHERE name IN ('$friend_new') ";
也就是说,有加入写中间', '
,并与''
了解[* prepared statements *](http://j.mp/T9hLWi) – Kermit 2013-04-26 22:52:05