クラスのメソッドに可変数の引数を渡そうとしています。これが私が呼び出そうとしているクラスの関数です:
class DbHelper{
....
public function Execute($query, $params){
$this->open();
$stmt = $this->mysqli->prepare($query) or die($this->mysqli->error);
call_user_func_array(array($stmt, 'bind_param'), $params); // 1
return $stmt->execute() ? $stmt->num_rows : 'ERROR';
}
....
}
関数を呼び出すために使用しているコードは次のとおりです。
....
$conn = new DbHelper();
$params = array('ss', $ID, $i);
$conn->Execute('INSERT INTO some_table (ID, `Index`) VALUES (?,?)', $params);
....
これによりエラーが発生します:
警告:mysqli_stmt :: bind_param()へのパラメーター2は参照であると予想され、値はオンラインの..mypath ..\dbhelper.phpで指定されます
数か月前の同じ問題に関する私の別の投稿(ここをクリック)では、以下のコードを使用するように提案された人もいます。
call_user_func_array(array($stmt, 'bind_param'), refValues($params));
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;
}
これを再度使用すると、同じエラーが発生します。このような関数を呼び出すと($ paramsの前に&を追加):
$conn->Execute('INSERT INTO some_table (ID, `Index`) VALUES (?,?)', &$params); // 2
このエラーが発生します:
非推奨:呼び出し時の参照渡しは、オンラインの..mypath ..\save.phpで非推奨になりました
あるいは、私は関数のこの定義を試しましたDbHelper::Execute
:
public function Execute($query, $params){
$this->open();
$stmt = $this->mysqli->prepare($query) or die($this->mysqli->error);
$stmt->{'bind_param'}($params); // 3
return $stmt->execute() ? $stmt->num_rows : 'ERROR';
}
これを呼び出すと、エラーは次のように表示されます。
警告:オンラインの..mypath ..\dbhelper.phpにあるmysqli_stmt::bind_param()のパラメーター数が間違っています
一方、関数が適切に呼び出されている場合、パラメーター数はbind_paramに対して正しいです。
PHPのバージョンは5.3.8です。
何か助けてください?