2013-04-26 12 views
0

배열이 $friends이고, 을 얻기 위해 $friend_new = join(',',$friends);을 사용했습니다. 어디에 문제가문자열을위한 MySQL IN

$query = mysqli_query($connect_db, "SELECT * FROM post WHERE name IN ($friend_new)"); 

사람이 알고 있나요 :이 쿼리를 사용할 때 하지만 오류가 발생했습니다?

+1

[* prepared statements *] (http://j.mp/T9hLWi) – Kermit

답변

3

implode("','", $friends)IN ('$friends_new')은 문자열 값이므로 사용해야합니다.


코드는 삽입에 취약합니다. 당신은 PDO/mysqli와 함께 적절하게 매개 변수화 된 쿼리를 사용해야합니다.

+0

+1은 SQL 삽입을 언급하고 PDO를 제안하는 유일한 사람입니다. – Asaph

3

귀하의 목록과 같이한다 :

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

당신 같은 친구의 배열이있는 경우 :

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

당신은 IN에 사용하기 위해 준비하는 implode를 사용할 수 있습니다

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

마지막으로,

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

개별 문자열을 따옴표로 묶지 않아 오류가 발생합니다. 가입 당신이 같이 할 수있는 이상 한 문자가 다음에 "풀"을 지정할 수 있습니다으로 :

$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') "; 

을 중간 ', ' 쓰기에 가입해야하고, ''

와 서라운드