PDOStatement::execute

(PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.1.0)

PDOStatement::execute Ejecuta una sentencia preparada

Descripción

public PDOStatement::execute ([ array $input_parameters ] ) : bool

Ejecuta la sentencia preparada. Si ésta incluía marcadores de parámetros, se debe:

  • llamar a PDOStatement::bindParam() y/o PDOStatement::bindValue() para vincular variables o valores (respectivamente) a los marcadores de parámetros. Las variables vinculadas pasan su valor como entrada y reciben el valor de salida, si lo hubiera, de sus marcadores de parámetros asociados

  • o pasar un array de valores de parámetros de sólo entrada

Parámetros

input_parameters

Un array de valores con tantos elementos como parámetros vinculados en la sentencia SQL que va a ser ejecutada. Todos los valores son tratados como PDO::PARAM_STR.

No es posible vincular múltiples valores a un único parámetro; por ejemplo, no se puede vincular dos valores a un único parámetro con nombre en una cláusula IN().

Tampoco es posible vincular más valores que los especificados; si existen más claves en input_parameters que en la sentencia SQL especificada en PDO::prepare(), entonces la sentencia fallará y se emitirá un error.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Historial de cambios

Versión Descripción
5.2.0 Las claves de input_parameters deben coincidir con aquellas declaradas en la sentencia SQL. Antes de PHP 5.2.0 esto se ignoraba silenciosamente.

Ejemplos

Ejemplo #1 Ejecutar una sentencia preparada con una variable y valor vinculados

<?php
/* Ejecutar una sentencia preparada vinculando una variable y un valor */
$calorías 150;
$color 'gre';
$gsent $gbd->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calorías AND colour LIKE :color'
);
$gsent->bindParam(':calories'$caloríasPDO::PARAM_INT);
$sth->bindValue(':colour'"%{$color}%");
$gsent->execute();
?>

Ejemplo #2 Ejecutar una sentencia preparada con un array de valores de inserción (parámetros con nombre)

<?php
/* Ejecutar una sentencia preparada proporcionando un array de valores de inserción */
$calorías 150;
$color 'red';
$gsent $gbd->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour'
);
$gsent->execute(array(':calories' => $calorías':colour' => $color));
?>

Ejemplo #3 Ejecutar una sentencia preparada con un array de valores de inserción (parámetros de sustitución)

<?php
/* Ejecutar una sentencia preparada proporcionando un array de valores de inserción */
$calorías 150;
$color 'red';
$gsent $gbd->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?'
);
$gsent->execute(array($calorías$color));
?>

Ejemplo #4 Ejecutar una sentencia preparada con parámetros de sustitución de signos de interrogación

<?php
/* Ejecutar una sentencia preparada vinculando variables de PHP */
$calorías 150;
$color 'red';
$gsent $gbd->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?'
);
$gsent->bindParam(1$caloríasPDO::PARAM_INT);
$gsent->bindParam(2$colorPDO::PARAM_STR12);
$gsent->execute();
?>

Ejemplo #5 Ejecutar una sentencia preparada usando un array para la cláusula IN

<?php
/* Ejecutar una sentencia preparada usando un array de valores para una cláusula IN */
$parámetros = array(12163171);
/* Crear una cadena para los parámetros de sustitución rellenados con el número de parámetros */
$place_holders implode(','array_fill(0count($parámetros), '?'));

/*
    Esto prepara una sentencia con suficientes parámetros de sustitución sin nombre para
    cada valor del array $parámetros. Los valores del array $parámetros son vinculados a
    los parámetros de sustitución de la sentencia preparada cuando ésta sea ejecutada.
    Esto no es lo mismo que usar PDOStatement::bindParam(), pues esto último
    requiere una referencia a la variable. En su lugar, PDOStatement::execute() sólo
    vincula por valor.
*/
$gsent $gbd->prepare("SELECT id, name FROM contacts WHERE id IN ($place_holders)");
$gsent->execute($parámetros);
?>

Notas

Nota:

Algunos controladores necesitan cerrar los cursores antes de poder ejecutar la siguiente sentencia.

Ver también