カスタムmysqliクラスのbind_paramのパラメーター数が間違っています

AashikP

$this->_mysqlimysqliインスタンスとしてカスタムmysqliクラス/ラッパーを生成しようとしています:

// Query string generator
private function gen_query($type, $data, $table){
    switch ($type) {
        case 'ins':
            $query = "INSERT INTO " .$table .' ';
            $query .= implode_key($opr= ', ', $data);
            $query .= " VALUES " . value($data);
            break;
        case 'select':
            // yet to generate
        default:
            $query ='';
            break;
    }
    return $query;
}

// Generates bind parameters
private function gen_param($data){
    $_param = "'";
    foreach ($data as $v) {
        $_param .= $this->detect_type($v);
    }
    $_param .= "', ";
    foreach ($data as $k=>$v) {
        if($v == end($data)) {
            $_param .="$$k";
            continue;
        }
        $_param .= "$$k, ";
    }
  return $_param;
}

public function insert( $table, $data ){
    $table  =  $this->_prefix . $table;
    $table = $this->escape($table);
    $query = $this->gen_query('ins', $data, $table);
    $stmt = $this->_mysqli->prepare($query);
    foreach ($data as $key => $value) {
        $$key = $value;
    }
    $test = $this->gen_param($data);
    if(!$stmt->bind_param($test)) {
        echo $this->_mysqli->error;
    }
    if($stmt->execute()){
        print 'Success!'.'<br />'; 
    } else {
        die('Error : ('. $this->_mysqli->errno .') '. $this->_mysqli->error);
    }   
}

したがって、ユーザーが入力すると

$data = [ 'first_name' => 'foo', 'last_name' => 'bar', 'another_field' => 'blah'];
$db->insert('t1', $data);

このエラーが発生します:

 Warning: Wrong parameter count for mysqli_stmt::bind_param() in path\to\class-db.php on line 138

これは138行目です。 if(!$stmt->bind_param($test))

AashikP

質問が却下された理由がわかりません。とにかく、私はこれを参照することで修正しました:このリポジトリ

を取り除き、gen_param代わりに配列を使用し、コールバック関数を使用して呼び出して、パラメーター値を正しく取得し、値を参照する必要があります。

コードは次のとおりです。

    public function insert( $table, $data ){
    $table  =  $this->_prefix . $table;
    $table = $this->escape($table);
    $this->esc_sql_arr($data);
    $query = $this->gen_query('ins', $data, $table);
    $stmt = $this->_mysqli->prepare($query);
    $this->_bind_param($data);
    call_user_func_array(array($stmt, 'bind_param'),$this->return_ref($this->bind_arr));
    if($stmt->execute()){
        echo "Success!";
    }else{
        die('Error : ('. $this->_mysqli->errno .') '. $this->_mysqli->error);
    }
    $this->reset();
}

private function _bind_param($data){
    foreach($data as $key=>$value) {
        $this->_bind_values($value);
    }
}

private function _bind_values($value) {
    $this->bind_arr[0] .= $this->detect_type($value);
    array_push($this->bind_arr, $value);
}

protected function return_ref(array &$arr)
{
    //Reference in the function arguments are required for HHVM to work
    //https://github.com/facebook/hhvm/issues/5155
    //Referenced data array is required by mysqli since PHP 5.3+
    if (strnatcmp(phpversion(), '5.3') >= 0) {
        $refs = array();
        foreach ($arr as $key => $value) {
            $refs[$key] = & $arr[$key];
        }
        return $refs;
    }
    return $arr;
}

コードは完全にはほど遠いですが、これで始めました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

mysqli_stmt_bind_result()のパラメーター数が間違っています

分類Dev

mysqli_stmt :: bind_param():変数の数がプリペアドステートメントのパラメーターの数と一致しません

分類Dev

AndroidStudioのカスタムクラスのファイルパスが間違っています

分類Dev

MongoDBシャードクラスター内のドキュメントの数が間違っています

分類Dev

HY093:パラメータの数が間違っています-位置

分類Dev

オーバーロード関数createDirectStreamの型パラメーターの数が間違っています

分類Dev

Xaml解析エラーのパラメータが間違っています

分類Dev

Rails:ネストされた属性パラメータ内の配列列の引数の数が間違っています(0の場合、1..2が必要です)

分類Dev

変更された `Chars`イテレータを使用する場合のライフタイムパラメータの数が間違っています

分類Dev

bind_paramのエラー、プリペアドステートメントのパラメータ数が一致しません

分類Dev

Kmeans:クラスターのサイズが間違っています

分類Dev

FragmentStatePagerAdapterコンストラクターの定数が間違っています

分類Dev

mysqli_stmt::bind_param(): 変数の数が、64 行目の準備されたステートメントのパラメーターの数と一致しません

分類Dev

PHP PDO、パラメータの列名が間違っているときにクラスメソッドがtrueを返しますか?

分類Dev

ライフタイムパラメータの数が間違っています:期待される1、見つかった0

分類Dev

call_user_func_array()-警告:mysqli_stmt :: bind_param():変数の数がプリペアドステートメントのパラメーターの数と一致しません

分類Dev

httpパラメータ値の構文が間違っています

分類Dev

opencvスカラーの値が間違っています

分類Dev

配列に含まれるパラメータのリストをbind_paramに渡す方法は?

分類Dev

DbgHelp:x64で値渡しシンボルの場合、関数パラメーターのアドレスが間違っています

分類Dev

コンストラクター引数の型が間違っている、PySide

分類Dev

PowerShell関数パラメーターで何が間違っていますか?

分類Dev

mysqli_fetch_assoc()はパラメーターを要求します/メンバー関数の呼び出しbind_param()エラー。実際のmysqlエラーを取得して修正する方法は?

分類Dev

150以上のパラメータとデータの不一致を使用してINSERTクエリにアクセスします。どのパラメータが間違っているかを見つける方法は?

分類Dev

パーセンテージが間違っている複数の変数のスタックバーをグラフ化する

分類Dev

Kerasのクラスの数が間違っています

分類Dev

TypeScript:ジェネリック関数の型引数が間違ったパラメーターから推測されています

分類Dev

PLS-00306でのCharOutパラメータエラーを使用したOracleストアドプロシージャの呼び出し:呼び出しでの引数の数またはタイプが間違っています

分類Dev

「strstr()のパラメータ数が間違っています」というエラーが表示されるのはなぜですか?

Related 関連記事

  1. 1

    mysqli_stmt_bind_result()のパラメーター数が間違っています

  2. 2

    mysqli_stmt :: bind_param():変数の数がプリペアドステートメントのパラメーターの数と一致しません

  3. 3

    AndroidStudioのカスタムクラスのファイルパスが間違っています

  4. 4

    MongoDBシャードクラスター内のドキュメントの数が間違っています

  5. 5

    HY093:パラメータの数が間違っています-位置

  6. 6

    オーバーロード関数createDirectStreamの型パラメーターの数が間違っています

  7. 7

    Xaml解析エラーのパラメータが間違っています

  8. 8

    Rails:ネストされた属性パラメータ内の配列列の引数の数が間違っています(0の場合、1..2が必要です)

  9. 9

    変更された `Chars`イテレータを使用する場合のライフタイムパラメータの数が間違っています

  10. 10

    bind_paramのエラー、プリペアドステートメントのパラメータ数が一致しません

  11. 11

    Kmeans:クラスターのサイズが間違っています

  12. 12

    FragmentStatePagerAdapterコンストラクターの定数が間違っています

  13. 13

    mysqli_stmt::bind_param(): 変数の数が、64 行目の準備されたステートメントのパラメーターの数と一致しません

  14. 14

    PHP PDO、パラメータの列名が間違っているときにクラスメソッドがtrueを返しますか?

  15. 15

    ライフタイムパラメータの数が間違っています:期待される1、見つかった0

  16. 16

    call_user_func_array()-警告:mysqli_stmt :: bind_param():変数の数がプリペアドステートメントのパラメーターの数と一致しません

  17. 17

    httpパラメータ値の構文が間違っています

  18. 18

    opencvスカラーの値が間違っています

  19. 19

    配列に含まれるパラメータのリストをbind_paramに渡す方法は?

  20. 20

    DbgHelp:x64で値渡しシンボルの場合、関数パラメーターのアドレスが間違っています

  21. 21

    コンストラクター引数の型が間違っている、PySide

  22. 22

    PowerShell関数パラメーターで何が間違っていますか?

  23. 23

    mysqli_fetch_assoc()はパラメーターを要求します/メンバー関数の呼び出しbind_param()エラー。実際のmysqlエラーを取得して修正する方法は?

  24. 24

    150以上のパラメータとデータの不一致を使用してINSERTクエリにアクセスします。どのパラメータが間違っているかを見つける方法は?

  25. 25

    パーセンテージが間違っている複数の変数のスタックバーをグラフ化する

  26. 26

    Kerasのクラスの数が間違っています

  27. 27

    TypeScript:ジェネリック関数の型引数が間違ったパラメーターから推測されています

  28. 28

    PLS-00306でのCharOutパラメータエラーを使用したOracleストアドプロシージャの呼び出し:呼び出しでの引数の数またはタイプが間違っています

  29. 29

    「strstr()のパラメータ数が間違っています」というエラーが表示されるのはなぜですか?

ホットタグ

アーカイブ