首頁 > 資料庫 > mysql教程 > 為什麼在使用 Mysqli 準備語句時出現「致命錯誤:在非物件上呼叫成員函數execute()」?

為什麼在使用 Mysqli 準備語句時出現「致命錯誤:在非物件上呼叫成員函數execute()」?

Linda Hamilton
發布: 2024-12-25 15:15:16
原創
915 人瀏覽過

Why Am I Getting

使用Mysqli 預備語句的陷阱

在嘗試使用預準備語句時,開發人員遇到了挑戰並收到錯誤「致命錯誤:呼叫成員函數執行() 在非物體上。

錯誤的根源

問題是由於省略參數綁定而產生的在執行準備好的語句之前。 Mysqli 需要在執行語句之前透過 mysqli_stmt_bind_param() 函數將參數綁定到應用程式變數。

實作準備好的語句

1.參數綁定:

$name = 'one';
$age  = 1;

$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");

// bind parameters. Refer to documentation for appropriate data types (e.g., 'si' for string and integer).
$stmt->bind_param('si', $name, $age);
登入後複製

2.語句執行:

$stmt->execute();
登入後複製

3.後續參數綁定與執行:

要插入不同值的多行,每次執行前必須重複參數綁定步驟。

範例:

$name = 'two';
$age  = 2;

// Update bound parameters
$stmt->bind_param('si', $name, $age);

// Execute with different values
$stmt->execute();
登入後複製

4.完整範例:

$mysqli = new mysqli("localhost", "root", "root", "test");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
}

$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");
try {
    // Insert one row
    $name = 'one';
    $age  = 1;
    $stmt->bind_param('si', $name, $age);
    $stmt->execute();

    // Insert another row with different values
    $name = 'two';
    $age  = 2;
    $stmt->bind_param('si', $name, $age);
    $stmt->execute();
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}
登入後複製

以上是為什麼在使用 Mysqli 準備語句時出現「致命錯誤:在非物件上呼叫成員函數execute()」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板