1

mysqliプライベート関数とのオブジェクト リンクを保持するクラスを作成してbind_params、この関数で使用される関数で必要なパラメーターを生成します。

call_user_func_array(array($stmt, 'bind_param'), $params);

参照によって値を渡す必要があるため、bind_param次のような関数を作成します。

// $values is taken from $_POST's values
private function &params($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 &params($values)か?

何が欠けていたのですか?

4

0 に答える 0