使用 mysqli 預準備語句
在 mysqli 中使用預備語句時,在執行查詢之前正確綁定參數非常重要。
錯誤調試
提供的程式碼遇到錯誤“Call to a member functionexecute() on a non-object”,因為尚未執行參數綁定。根據 mysqli_prepare 文檔,在執行之前需要使用 mysqli_stmt_bind_param 綁定參數標記。
帶有錯誤處理的完整範例:
以下是一個更完整的範例,包括參數綁定、錯誤處理,並示範使用準備好的插入和取得資料語句:
<?php // Establish database connection $mysqli = new mysqli("localhost", "root", "root", "test"); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: " . $mysqli->connect_error; exit; } // Prepare insert statement $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); if (!$stmt) { echo "Error preparing statement: " . $mysqli->error; exit; } // Bind parameters and insert one row $name = 'One'; $age = 1; $stmt->bind_param('si', $name, $age); $stmt->execute(); if ($stmt->errno) { echo "Error executing insert: " . $stmt->error; exit; } // Insert another row with different values $name = 'Two'; $age = 2; $stmt->bind_param('si', $name, $age); $stmt->execute(); if ($stmt->errno) { echo "Error executing insert: " . $stmt->error; exit; } // Prepare select statement $stmt = $mysqli->prepare("SELECT name, age FROM users"); if (!$stmt) { echo "Error preparing statement: " . $mysqli->error; exit; } // Execute select statement and fetch results $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { echo "{$row['name']} is {$row['age']} years old<br>"; } } // Close statement and connection $stmt->close(); $mysqli->close(); ?>
此程式碼處理語句準備、執行和結果檢索期間的錯誤,提供更強大的預準備語句用法示範。
以上是為什麼我的 mysqli 準備語句會回傳「呼叫非物件上的成員函數execute()」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!