1

私は、PHP サイト全体でそれらの実装を開始できるように、準備されたステートメントを学習しようとしています。この関数は、$_POST 転送メソッドを使用して検索フォームのテキスト ボックスから値 (または値なし) を取得し、それらのテキスト ボックスの名前と値を使用して WHERE 句に基準を追加します。関数は以前は機能していましたが、準備されたステートメントを機能させることができないようです。

いくつかのスクリプトを調査して、以下のスクリプトを使い始め、いくつかのバグを解決しました。実行すると、mysqli_stmt::bind_param() のパラメーター数が間違っていますというエラーが表示されます

このクエリを実行した後、値をテーブルにエクスポートしたいのですが、準備されたステートメントを試みる前に作業していました。

これが私がこれまでに持っているコードです:

  <?php

   $db = mysqli_connec("ip_address", "loginname", "password", "database");

    $refs = array('sssss');

    foreach ($_POST as $key => $value)
     {
       $refs[] =& $_POST[$key];
      }    

$query = "SELECT col1, col2, col3, col4, col5 FROM tbl_name WHERE 1=1";
    foreach ($_POST as $k => $v) 
    { 
      if(!empty($v)) {
        $query .= " AND $k = ?"; 
        $params[$k] = $v;
        }   
    }       

    $results = $db->prepare($query);        

     call_user_func_array(array($results, 'bind_param'), $refs);

    $results->execute();    

?>

4

2 に答える 2

3

に渡されるパラメータは参照によって渡されるmysqli_stmt::bind_param必要があり、変数のみが参照によって渡されるためcall_user_func_array、この場合、関数の結果を直接 に渡すことはできません。また、 に渡される最初のパラメーターbind_paramは、変数の型の文字列リストです。代わりに、これを試してください:

// Change to whatever types are relevant
$refs = array('sss');

foreach ($arr as $key => $value)
{
  $refs[] =& $arr[$key];
}

call_user_func_array(array($results, 'bind_param'), $refs);

編集

この行は間違っています:

$results = $mysqli->prepare($query);

する必要があります

$results = $db->prepare($query);
于 2013-03-29T16:45:59.073 に答える