2012-01-26 3 views
3
$artist_user_ids = implode(',',$artist_user_ids); 
$referrer = "referrer IN (?)"; 
$query = "SELECT id FROM users WHERE $referrer"; 
$con = db_connect(); 
$stmt = db_prepare($con, $query); 
bind_param('s', $artist_user_ids); 

これは動作しません。しかし、1行目を次のように変更した場合、PHP mysqliバインディングのIN句の問題

$artist_user_ids = "'" . implode(',',$artist_user_ids) . "'"; 

これは魅力的です。何がありますか?

+0

が重複する可能性:// stackoverflow.com/questions/3753295/can-i-bind-multiple-values-as-a-single-parameter-using-mysqli-and-php) –

+0

@Michaelまあまあです。私の質問は:**なぜ**ですか? 'implode()'は文字列を返します。なぜ文字列を引用する必要がありますか? –

+0

IN句には複数のパラメータがあるためです。それらをバインドするには、複数のパラメータとしてバインドする必要があります。値の文字列を複数のパラメータに評価することはできません。そうすることで、パラメータ化されたクエリが提供するセキュリティの利点が損なわれます。 –

答えて

0
SELECT id FROM users WHERE referrer IN ('val1, val2, ...'); 

が、その非常に正確ではないが....あなたはそれを他の方法で行う必要があり

(HTTP [私はmysqliのやPHPを使用して、単一のパラメータとして複数の値をバインドすることはできますか?]の
関連する問題