Para preparar y ejecutar una sentencia de SQL que incluya la entrada de variables, utilice los métodos PDO::prepare, PDOStatement::bindParam
y PDOStatement::execute. Preparar una sentencia mejora el rendimiento porque el servidor de bases de datos crea un plan de acceso optimizado para la recuperación de datos que puede reutilizar si se vuelve a ejecutar la sentencia.
Procedimiento
Para preparar y ejecutar una sentencia de SQL que incluye marcadores de parámetro:
- Llame al método PDO::prepare , pasando los argumentos listados:
- sentencia
- Una serie que contiene la sentencia SQL, incluyendo signos de interrogación (?) o variables con nombre (
:name) como marcadores de parámetro para cualquier columna o valor de predicado que requiera entrada de variable. Sólo puede utilizar marcadores de parámetro como lugar reservado para los
valores de columna o predicado. El compilador de SQL no puede crear un plan de
acceso para una sentencia que usa marcadores de parámetro en lugar de nombres
de columna, nombres de tabla u otros identificadores de SQL. No puede utilizar marcadores de parámetro de signo de interrogación (?) y marcadores de parámetro con nombre (:name) en la misma sentencia SQL.
- opciones_controlador
- Opcional: Una matriz que contiene opciones de sentencias:
- PDO::ATTR_CURSOR
- Esta opción establece el tipo de cursor que PDO devuelve para los conjuntos de resultados. Por omisión, PDO devuelve un cursor de sólo avance (PDO::CURSOR_FWDONLY), que devuelve la fila siguiente de un conjunto de resultados para cada
llamada a
PDOStatement::fetch(). Puede establecer este parámetro
en PDO::CURSOR_SCROLL para solicitar un cursor desplazable.
Si la llamada de función tiene éxito, devuelve un objeto PDOStatement que puede utilizar en llamadas de método posteriores relacionadas con esta consulta.
Si la llamada de función falla (devuelveFalse), puede utilizar el método PDO::errorCode o PDO::errorInfo para recuperar información de diagnóstico sobre el error.
- Opcional: Para cada marcador de parámetro de la serie SQL, llame al método PDOStatement::bindParam , pasando los argumentos listados. Vincular valores de entrada a marcadores de parámetros garantiza que cada valor de entrada se trate como un único
parámetro, evitando ataques de inyección de SQL contra la aplicación.
- Parámetro
- Un identificador de parámetro. Para los marcadores de parámetro de signo de interrogación (?), es un entero que representa la posición de 1 indexado del parámetro en la sentencia SQL. Para marcadores de parámetro
con nombre (
:name), se trata de una serie que representa el nombre
de parámetro.
- variable
- Valor que se debe utilizar en lugar del marcador de parámetro
- Llame al método PDOStatement::execute , pasando opcionalmente una matriz que contenga los valores a utilizar en lugar de los marcadores de parámetro, ya sea en orden para los marcadores de parámetro de signo de interrogación, o como una
:name => value matriz asociativa para marcadores de parámetro con nombre.
Ejemplo
Preparar y ejecutar una sentencia que incluye entrada de variables.
$sql = "SELECT firstnme, lastname FROM employee WHERE bonus > ? AND bonus < ?";
$stmt = $conn->prepare($sql);
if (!$stmt) {
// Handle errors
}
// Explicitly bind parameters
$stmt->bindParam(1, $_POST['lower']);
$stmt->bindParam(2, $_POST['upper']);
$stmt->execute($stmt);
// Invoke statement again using dynamically bound parameters
$stmt->execute($stmt, array($_POST['lower'], $_POST['upper']));
Qué hacer a continuación
Si la sentencia de SQL devuelve uno o varios conjuntos de resultados, puede empezar a captar filas del recurso de sentencia llamando al método PDOStatement::fetch o PDOStatement::fetchAll.