Sentencias preparadas y vinculación de parámetros
Utilice prepare, bindParam y execute para evitar la inyección SQL.
Sentencias preparadas y vinculación de parámetros es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.
¿Por qué usar sentencias preparadas?
Las sentencias preparadas separan la estructura SQL de los datos. La entrada del usuario siempre se trata como un valor, nunca como código SQL, lo que hace imposible la inyección SQL.
prepare() + execute()
Flujo básico: prepare con marcadores de posición y, después, execute con los valores.
<?php
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$_POST["email"]]);
$user = $stmt->fetch();Marcadores de posición con nombre
Use marcadores de posición con nombre (:name) para mejorar la claridad, especialmente cuando el mismo valor aparece varias veces.
<?php
$stmt = $pdo->prepare(
"INSERT INTO users (name, email) VALUES (:name, :email)"
);
$stmt->execute([':name' => "Alice", ':email' => "alice@example.com"]);bindParam frente a bindValue
bindParam vincula una variable por referencia; el valor se lee en el momento de la ejecución. bindValue vincula un valor inmediatamente.
<?php
$name = "Bob";
$stmt = $pdo->prepare("INSERT INTO users (name) VALUES (:name)");
$stmt->bindParam(":name", $name);
$name = "Carol";
$stmt->execute(); // inserts "Carol"Ejemplo de bindValue
Use bindValue cuando quiera fijar el valor en el momento de vincularlo.
<?php
$stmt = $pdo->prepare("SELECT * FROM products WHERE price < :max");
$stmt->bindValue(":max", 50.00, PDO::PARAM_INT);
$stmt->execute();Constantes de tipo
El tercer parámetro, opcional, especifica el tipo de datos: PDO::PARAM_INT, PDO::PARAM_STR, PDO::PARAM_BOOL, PDO::PARAM_NULL.
Volver a ejecutar sentencias
Una sentencia preparada puede ejecutarse varias veces; la consulta se compila una sola vez en el servidor.
<?php
$stmt = $pdo->prepare("INSERT INTO logs (msg) VALUES (:msg)");
foreach ($messages as $msg) {
$stmt->execute([':msg' => $msg]);
}rowCount()
Después de INSERT/UPDATE/DELETE, rowCount() devuelve cuántas filas se vieron afectadas.
<?php
$stmt = $pdo->prepare("DELETE FROM users WHERE active = 0");
$stmt->execute();
echo $stmt->rowCount()." users deleted";lastInsertId()
Después de un INSERT, obtenga la clave primaria autoincremental con $pdo->lastInsertId().
<?php
$stmt = $pdo->prepare("INSERT INTO articles (title) VALUES (:t)");
$stmt->execute([':t' => "My Post"]);
$newId = $pdo->lastInsertId();Nunca concatene la entrada del usuario
Nunca haga lo siguiente: "SELECT * FROM users WHERE name = '".$name."'". Use siempre marcadores de posición, incluso si ha "sanitizado" la entrada.
Objeto PDOStatement
prepare() devuelve un PDOStatement con: execute(), fetch(), fetchAll(), bindParam(), bindValue(), rowCount().
Resumen
Use siempre sentencias preparadas para las consultas que incluyan datos externos. Prefiera los marcadores de posición con nombre. Use bindValue para valores inmediatos y bindParam para vinculaciones en bucles.
Comprobación rápida
¿Cuándo lee bindParam su valor?
Preguntas frecuentes
¿La lección «Sentencias preparadas y vinculación de parámetros» es gratis?
Sí — el texto completo de «Sentencias preparadas y vinculación de parámetros» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Sentencias preparadas y vinculación de parámetros»?
Utilice prepare, bindParam y execute para evitar la inyección SQL. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar PHP Academy?
No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Sentencias preparadas y vinculación de parámetros»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de PHP Academy?
Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conexión a MySQL con PDO
- Sentencias preparadas y vinculación de parámetros
- Obtención de resultados con PDO
- Transacciones con PDO