Preparación y ejecución de sentencias de SQL en PHP (PDO)

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.

Antes de empezar

Obtener un objeto de conexión mediante una llamada al constructor de PDO. Consulte Conexión a una base de datos de servidor de datos de IBM con PHP (PDO).

Procedimiento

Para preparar y ejecutar una sentencia de SQL que incluye marcadores de parámetro:

  1. 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.

  2. 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
  3. 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.

    Para obtener más información sobre la API de PDO , consulte http://php.net/manual/en/book.pdo.php.

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.