2013-04-26 93 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') "; 

也就是說,有加入寫中間', ',並與''

包圍