我有一個數組$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