Начало работы с подготовленными операторами в MySQL
Подготовленные операторы — важный инструмент для написания безопасных и эффективных SQL-запросов. В этой статье мы рассмотрим, как использовать подготовленные операторы с mysqli, расширением MySQLi в PHP.
Синтаксическая ошибка: необъектное выполнение
Ошибка, с которой вы столкнулись , «Неустранимая ошибка: вызов функции-члена Execute() для объекта, не являющегося объектом», обычно указывает на то, что переменная $stmt не инициализирована должным образом или не является объектом. Вот как это исправить:
$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");
Убедитесь, что у вас есть допустимое соединение с базой данных, прежде чем продолжить.
Привязка Параметры
Подготовленные операторы используют маркеры параметров (например, ?) для представления входных значений. Эти значения необходимо привязать к переменным PHP перед выполнением оператора. Вот пример:
$name = 'one'; $age = 1; $stmt->bind_param('si', $name, $age);
В этом примере мы связываем параметр name как строку ('s'), а параметр age как целое число ('i ').
Выполнение оператора
После привязки параметров вы можете выполнить подготовленный оператор:
$stmt->execute();
Обработка ошибок
Подготовленные операторы обеспечивают лучшую обработку ошибок, чем прямые запросы SQL. Используйте метод mysqli_stmt::error для получения сообщений об ошибках:
if ($stmt->error) { die("Error: " . $stmt->error); }
Полный пример
Вот полный пример вставки, выбора и обработки ошибок:
// Establish connection $mysqli = new mysqli("localhost", "root", "root", "test"); // Prepare and bind parameters $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); $stmt->bind_param('si', $name, $age); // Insert multiple rows $name = 'one'; $age = 1; $stmt->execute(); $name = 'two'; $age = 2; $stmt->execute(); // Prepare and execute select statement $stmt = $mysqli->prepare("SELECT * FROM users"); $stmt->execute(); // Bind result $result = $stmt->get_result(); // Process results while ($row = $result->fetch_assoc()) { echo $row['name'] . ", " . $row['age'] . "
\n"; } // Handle errors if ($stmt->error) { die("Error: " . $stmt->error); }
Используя подготовленные операторы, вы можете предотвратить атаки SQL-инъекций и писать более надежные и эффективные SQL-запросы.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3