在嘗試使用預準備語句時,開發人員遇到了挑戰並收到錯誤「致命錯誤:呼叫成員函數執行() 在非物體上。
問題是由於省略參數綁定而產生的在執行準備好的語句之前。 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中文網其他相關文章!