2011-12-23 17 views
1

mysql_real_escape_stringはIN節の値にスラッシュを追加するため、値は返されません。どのようにIN句でmysql_real_escape_string()を使用してエスケープされた配列値を送信できますか?このような変更をmysql_real_escape_stringの後IN句でmysql_real_escape_stringを使用

$names_array = array('dave','smith'); 
$names = mysql_real_escape_string("'". implode("', '", $names_array) ."'"); 
$sql = "SELECT * FROM user WHERE user_name IN ($names)"; 
$results = mysql_query($sql); 

クエリ:

SELECT * FROM user WHERE user_name IN (\'dave\', \'smith\') 

私はIN句に、ここでこれらのスラッシュを望んでいない

は、ここに私のコードです。また、私はIN節で直接代入された値を望んでいません。 ありがとうございました。

答えて

4

これは可能性があります。

$names = "'". implode("', '", array_map('mysql_real_escape_string', $names_array)). "'"; 
+0

素晴らしいです。ありがとう –

0

mysql_real_escape_stringを使用しないでください。 mysql_*関数を直接使用しないでください。 ADODBなどを使用してください。この方法でクエリを連結しないで、プレースホルダ(?)とプリペアドステートメントを使用してください。コードは次のようになります。

include('/path/to/adodb.inc.php'); 
$DB = NewADOConnection('mysql'); 
$DB->Connect($server, $user, $pwd, $db); 

# M'soft style data retrieval with binds 
$rs = $DB->Execute("select * from user where user_names in ?",array(array('dave','smith'))); 
while (!$rs->EOF) { 
    print_r($rs->fields); 
    $rs->MoveNext(); 
} 
+0

私は思っています* mysqli *はadodbよりも優れていますか? –

+0

ありがとうTom Regner。 –

+1

@Shipluそれは適切な手順を使用している限り、私は何にdbのアクセスライブラリが使用されているかとは無関係です:); ADODB、PDOなどを使用するインセンティブは、プロジェクトがPHPの部分ではなく開発中にデータベースを切り替える場合、SQLをちょっと微調整する必要があることです。 –

関連する問題