mysqli
プライベート関数とのオブジェクト リンクを保持するクラスを作成してbind_params
、この関数で使用される関数で必要なパラメーターを生成します。
call_user_func_array(array($stmt, 'bind_param'), $params);
参照によって値を渡す必要があるため、bind_param
次のような関数を作成します。
// $values is taken from $_POST's values
private function ¶ms($values) {
// Generate first value for bind_params like: 'ssis'
$param_type = '';
foreach ($values as $value) {
$param_type .= gettype($value)[0];
}
// Generate the rest value for bind_params
$params[] = & $param_type;
for ($i = 0; $i < count($values); $i++) {
$params[] = & $values[$i];
}
// The returned values should be like { 'ssi', $str_value, $str_value, $int_value }
return $params;
}
準備されたステートメントを実行する方法は次のとおりです。
function insert_prepared($query, $posted) {
$params = &$this->params(array_values($posted));
$stmt = $this->mysqli->prepare($query);
if ($stmt) {
call_user_func_array(array($stmt, 'bind_param'), $params);
if ($stmt->execute()) {
return true;
} else {
return false;
}
}
}
さて、問題は、参照になると予想されることcall_user_func_array(array($stmt, 'bind_param'), $params)
についてまだ不満があるのはなぜですか?
マニュアルには、関数は次のように記述する必要があると記載されていましたfunction ¶ms($values)
か?
何が欠けていたのですか?