2013-04-26 94 views
0

我有一个数组$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)"); 

有谁知道问题出在哪里?

+1

了解[* prepared statements *](http://j.mp/T9hLWi) – Kermit 2013-04-26 22:52:05

回答

3

您应该使用implode("','", $friends)IN ('$friends_new'),因为这些是字符串值。


您的代码很容易被注入。你应该使用正确的参数化查询PDO/mysqli

+0

+1是唯一提及SQL注入并提示PDO的人。 – Asaph 2013-04-26 22:55:37

3

列表中的样子:

... IN ('friend1','friend2','friend3') 

如果你有朋友如数组:

$friends = array("friend1","friend2","friend3"); 

可以使用implode以备今后使用与IN

$friend_new = "'" . implode("','", $friends) . "'"; 

最后,

SELECT * FROM post WHERE name IN ($friend_new) 
0

你这样做的单个字符串不会被引用,并导致错误。随着加入允许你指定一个“胶水”超过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') "; 

也就是说,有加入写中间', ',并与''

包围