Comenzando con declaraciones preparadas en MySQL
Las declaraciones preparadas son una herramienta esencial para escribir consultas SQL seguras y eficientes. En este artículo, exploraremos cómo usar declaraciones preparadas con mysqli, la extensión MySQLi en PHP.
Error de sintaxis: ejecución sin objeto
El error que encuentra , "Error grave: llamada a una función miembro ejecutar() en un objeto que no es un objeto", normalmente indica que la variable $stmt no está inicializada correctamente o es un objeto. Aquí se explica cómo corregirlo:
$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");
Asegúrese de tener un conexión válida a la base de datos antes de continuar.
Parámetros de enlace
Las declaraciones preparadas utilizan marcadores de parámetros (por ejemplo, ?) para representar valores de entrada. Estos valores deben estar vinculados a variables PHP antes de ejecutar la declaración. Aquí hay un ejemplo:
$name = 'one'; $age = 1; $stmt->bind_param('si', $name, $age);
En este ejemplo, vinculamos el parámetro de nombre como una cadena ('s') y el parámetro de edad como un número entero ('i ').
Ejecutar la declaración
Una vez vinculados los parámetros, puede ejecutar el comando preparado. declaración:
$stmt->execute();
Manejo de errores
Las declaraciones preparadas proporcionan un mejor manejo de errores que las consultas SQL directas. Utilice el método mysqli_stmt::error para recuperar mensajes de error:
if ($stmt->error) { die("Error: " . $stmt->error); }
Ejemplo completo
Aquí hay un ejemplo completo de inserción, selección y manejo de errores:
// 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); }
Al utilizar declaraciones preparadas, puede evitar ataques de inyección SQL y escribir consultas SQL más sólidas y eficientes.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3