Dalam percubaan untuk menggunakan kenyataan yang disediakan, pembangun menghadapi cabaran dan menerima ralat "Ralat maut: Panggilan ke fungsi ahli laksanakan () pada bukan objek." Artikel ini menyelidiki punca isu ini dan menyediakan panduan komprehensif tentang penggunaan penyataan yang disediakan dengan betul dalam Mysqli.
Isu timbul daripada peninggalan pengikatan parameter sebelum melaksanakan kenyataan yang disediakan. Mysqli memerlukan pengikatan parameter kepada pembolehubah aplikasi melalui fungsi mysqli_stmt_bind_param() sebelum melaksanakan pernyataan.
1. Pengikatan Parameter:
$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. Perlaksanaan Kenyataan:
$stmt->execute();
3. Pengikatan dan Perlaksanaan Parameter Seterusnya:
Untuk memasukkan berbilang baris dengan nilai yang berbeza, langkah pengikatan parameter mesti diulang sebelum setiap pelaksanaan.
Contoh:
$name = 'two'; $age = 2; // Update bound parameters $stmt->bind_param('si', $name, $age); // Execute with different values $stmt->execute();
4. Contoh Lengkap:
$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(); }
Atas ialah kandungan terperinci Mengapa Saya Mendapat 'Ralat maut: Panggilan ke fungsi ahli laksanakan() pada bukan objek' Apabila Menggunakan Penyata Disediakan Mysqli?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!