2013-07-26 17 views
6

は今、私はmysqliのクエリに複数のパラメータを結合に対処するために、次の構造を使用するように過ごしています:バインド複数のパラメータ

if ($words_total == 1) 
{ 
    $statement -> bind_param("s", $words[0]); 
} 
else if ($words_total == 2) 
{ 
    $statement -> bind_param("ss", $words[0], $words[1]); 
} 
else if ($words_total == 3) 
{ 
    $statement -> bind_param("sss", $words[0], $words[1], $words[2]); 
} 

//and so on.... 

私は以下のコードを使用して、疑問符の数を仕事とそれを私のクエリに挿入してください:

私の質問には、私が動的に必要とするだけ多くの入力を処理する方法が必要です。 bind_param()のハードコーディングは、これを処理する実際に悪い方法のようです。

<?php 
$values = array('b','c','d'); 

$in = str_repeat("?,", count($values)); 
$in = trim($in, ","); 

$sql = "SELECT * from users where username in($in)"; 
$stm = $con->prepare($sql); 

$types = str_repeat("s", count($values)); 

if (strnatcmp(phpversion(),'5.3') >= 0) 
{ 
    $bind = array(); 
    foreach($values as $key => $val) 
    { 
     $bind[$key] = &$values[$key]; 
    } 

} else { 

    $bind = $values; 
} 

array_unshift($bind, $types); 
call_user_func_array(array($stm, 'bind_param'), $bind); 

#var_dump($sql, $types, $bind, $con->error); 

$stm->execute(); 
$res = $stm->get_result(); 
while($row = $res->fetch_assoc()) var_dump($row); 

ラインのみ開発テスト用ですコメント:私はここではPHPのバージョン5.4.10

答えて

14

を使用しています

は、溶液またはプリペアドステートメントをmysqliのために値の可変数を結合の実際の問題が行きます。非常に便利です。

最初の問題は、エラー報告の欠如でした。

これは、この特定のケースだけでなく、PHPでのあなたのすべての経験を損なってしまいました。
何か問題が起こるたびに、PHPはあなたに何が起こったのか、誰に責任があるのか​​を伝えます。あなたがそれを許した場合に限ります。そして、あなたはいつもすべきです。

あなたは、エラーメッセージを持ちながら、あなたは、単にそれをGoogleと数秒で解決策を見つけることができます。このanswer on error reporting basics

を読むことができます。あるいは、少なくともあなたが知っているだろう、あなたが持っている特定の問題。実際にはcall_user_func_array()の動作であり、突然変更されました。

+0

ありがとうございました。私は文字通り、この問題の醜い解決策を絶望していました。エラー報告が私の弱点であり、私が時間をかけてより多くのことを学ぶ必要があることに同意します。私は2ヶ月前のようにphpを学んだだけで、今までは可能な限り多くできるようになってきました。今私は多分、できるだけ多くのことに集中する必要があると思う!ハグと感謝! –

関連する問題