2011-09-13 12 views
0

PHPで実行するためのSQL文を準備するために配列を使って、未知数のパラメータ(1-10)を渡そうとしています。N個のパラメータをPHPの準備済みSQL文に渡すには?

function executeStatement ($myArray) { 

    //for example, $myArray = ("one", "two", "three") 

    $qry = "SELECT * FROM table WHERE FieldA LIKE ".$myArray[0]." OR FieldA LIKE ".$myArray[1]." OR FieldA LIKE ".$myArray[2]."; 

    $result = mysql_query($qry) or die("Query failed with error: ".mysql_error()); 
} 

配列を使用してN個のパラメータを渡す効率的な方法はありますか?プリペアドステートメントでそれを行うには、私が正しく質問を理解していた場合、以下の

$queryStr = "SELECT * FROM `table` WHERE "; 
foreach($myArray as $single){ 
    $queryStr .= "$addStr`FieldA` LIKE '".mysql_real_escape_string($single)."'"; //Note the mysql_real_escape_string, this should help guard against sql injection 
    $addStr = ' OR '; 
} 
$query = mysql_query($queryStr) or die(mysql_error()); 

また働くべきか

答えて

0

本当にわからない、私は=ではなくLIKEのは、あなたがしようとしている場合を除き使用することをお勧めしますワイルドカードを使用する

+0

完璧、おかげ:

LIKEはより次のようになります。これは私が意味していたものです。それぞれの後に%を追加して、意図したクエリにマッチさせました。 – sgb

0

prepared prepared statementは、データベースが攻撃から保護されるように値が正しくエスケープされているものを意味します。

これはあなたが持っているものではなく、実際に値をエスケープする必要があります。おそらくあなたはこれを他のところでやっていますが、私は見ることができません。

このような何かしてみてください、あなたの質問に答えるために:あなたの値は他の場所でエスケープされていない場合は、これを行う

function executeStatement ($myArray) { 

    //for example, $myArray = array("one", "two", "three") 

$qry = "SELECT * FROM table WHERE "; 

foreach($myArray as $arr){ 

$flds[] = "FIELDA = '$arr' "; 

} 

$qry .= join(" OR " , $flds); 
echo $qry; 
} 

を:

$flds[] = "FIELDA = '". mysql_real_escape_string($arr) ."' "を。

文字列を引用せずにLIKEを使用していて、LIKEで使用されているワイルドカード文字がないので、一致するかどうかをテストしました。

$flds[] = "FIELDA LIKE '%". mysql_real_escape_string($arr) ."' "; 
関連する問題