mysqli binding_param() パラメータ参照エラー: RefValues 関数による解決
「mysqli_stmt::bind_param() Expected」というエラーが表示されるのはなぜですか参考になる、価値があるGiven"?
エラー「mysqli_stmt::bind_param() Expected to be a Reference, value provided」は、変数または値を、参照を予期するbind_param() メソッドに値渡ししようとすると発生します。 。この問題は、call_user_func_array() を使用して、bind_param() に複数のパラメータを渡すときに発生する可能性があります。
問題の理解
bind_param() を含む MySQLi 関数には、変数を渡す必要があります。最適なパフォーマンスのための参考として。ただし、call_user_func_array() はパラメータを値として期待します。この期待の不一致によりエラーが発生します。
解決策: RefValues() 関数の使用
この問題を解決するには、refValues() 関数を使用します。値の配列を参照の配列に変換します。以下に例を示します。
function refValues($arr){ if (strnatcmp(phpversion(),'5.3') >= 0) //Reference is required for PHP 5.3+ { $refs = array(); foreach($arr as $key => $value) $refs[$key] = &$arr[$key]; return $refs; } return $arr; } $query = "INSERT INTO test (id,row1,row2,row3) VALUES (?,?,?,?)"; $params = array(1,"2","3","4"); $param_type = "isss"; $sql_stmt = mysqli_prepare ($mysqli, $query); call_user_func_array('mysqli_stmt_bind_param', array_merge(array($sql_stmt, $param_type), refValues($params))); mysqli_stmt_execute($sql_stmt);
代替解決策: スプレッド演算子の使用
PHP の新しいバージョンでは、スプレッド演算子 (...) を使用して変換できます。値の配列を参照の配列に変換します。以下に例を示します:
$query = "INSERT INTO test (id,row1,row2,row3) VALUES (?,?,?,?)"; $params = array(1,"2","3","4"); $param_type = "isss"; $sql_stmt = mysqli_prepare ($mysqli, $query); call_user_func_array([$sql_stmt, 'bind_param'], [$param_type, ...$params]); mysqli_stmt_execute($sql_stmt);
以上が「mysqli_stmt::bind_param() は参照であることが期待されますが、値が指定されました」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。