Función para Ejecutar Consultas Preparadas
<?php
function ejecutarConsultaPreparada($conn, $sql, $parametros) {
$stmt = $conn->prepare($sql);
if ($stmt === false) {
die("Error al preparar la consulta: " . $conn->error);
}
$tipos = '';
foreach ($parametros as $parametro) {
if (is_int($parametro)) {
$tipos .= 'i'; // entero
} elseif (is_float($parametro)) {
$tipos .= 'd'; // doble
} else {
$tipos .= 's'; // cadena
}
}
$stmt->bind_param($tipos, ...$parametros);
$stmt->execute();
$resultado = $stmt->get_result();
$stmt->close();
return $resultado;
}
?>
Parámetros de la Función:
- Pasos de la Función:
- Preparación de la Consulta: Se utiliza
$conn->prepare($sql)para preparar la consulta SQL. Si hay algún error, se muestra un mensaje de error y se termina la ejecución del script. - Determinación de Tipos de Parámetros: La función recorre el array de parámetros (
$parametros) para determinar el tipo de cada uno (entero, doble o cadena). Estos tipos se utilizan en la funciónbind_parammás adelante. - Asociación de Parámetros: Se utiliza
$stmt->bind_param($tipos, ...$parametros)para asociar los parámetros a la consulta preparada. Los tres puntos (...) se utilizan para desempaquetar el array de parámetros. - Ejecución de la Consulta: Se ejecuta la consulta preparada con
$stmt->execute(). - Obtención de Resultados: Si la consulta devuelve resultados, se obtienen con
$stmt->get_result(). Puedes adaptar esta parte según tus necesidades; por ejemplo, si esperas resultados diferentes, puedes ajustarla. - Cierre del Statement: Se cierra el statement con
$stmt->close()para liberar recursos. - Retorno de Resultados: Finalmente, la función retorna el objeto de resultados.
- Preparación de la Consulta: Se utiliza
Esta función proporciona una forma segura y eficiente de ejecutar consultas SQL en PHP, reduciendo el riesgo de inyección SQL al utilizar consultas preparadas y vinculación de parámetros.
Vamos a ver un ejemplo completo de cómo puedes utilizar la función ejecutarConsultaPreparada en un escenario práctico. Supongamos que tienes una tabla llamada usuarios con dos columnas: id y nombre.
Primero, establecemos la conexión a la base de datos:
<?php
$servername = "tu_servidor";
$username = "tu_usuario";
$password = "tu_contraseña";
$dbname = "tu_base_de_datos";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Conexión fallida: " . $conn->connect_error);
}
?>
Ahora, vamos a utilizar la función ejecutarConsultaPreparada para insertar un nuevo usuario en la tabla:
<?php
include 'funciones.php'; // Asegúrate de incluir el archivo que contiene la función
// Datos del nuevo usuario
$nombreNuevoUsuario = "John Doe";
// Consulta preparada para insertar un nuevo usuario
$sqlInsert = "INSERT INTO usuarios (nombre) VALUES (?)";
// Parámetros a vincular
$parametrosInsert = array($nombreNuevoUsuario);
// Llamada a la función para ejecutar la consulta preparada
$resultadoInsert = ejecutarConsultaPreparada($conn, $sqlInsert, $parametrosInsert);
if ($resultadoInsert === false) {
echo "Error al insertar el nuevo usuario: " . $conn->error;
} else {
echo "Nuevo usuario insertado correctamente.";
}
?>
En este ejemplo:
- Hemos creado una consulta preparada para insertar un nuevo usuario en la tabla
usuarioscon un nombre específico. - Luego, hemos definido un array
$parametrosInsertque contiene los valores de los parámetros que serán vinculados en la consulta preparada. - Finalmente, llamamos a la función
ejecutarConsultaPreparadapasando la conexión, la consulta preparada, y los parámetros. El resultado se almacena en la variable$resultadoInsert.
Este es un ejemplo básico, y puedes adaptarlo según tus necesidades específicas. La función ejecutarConsultaPreparada te proporciona una forma segura y eficiente de ejecutar consultas preparadas en tu aplicación PHP.