PDO::prepare
  (PHP 5 >= 5.1.0, PHP 7, PHP 8, PHP 8,PECL pdo >= 0.1.0)
PDO::prepare — 
   Prepara una consulta para su ejecución y devuelve un objeto
  
  
 
  Descripción
  
  
  
   Debe incluirse un marcador con un nombre único para cada valor que
   se desee pasar en la consulta al llamar a
   PDOStatement::execute(). No puede utilizarse
   un marcador con dos nombres idénticos en una consulta preparada, a menos que
   el modo de emulación esté activo.
  
Nota: 
   
    Los marcadores de parámetros pueden representar únicamente un literal de
    datos completo.
    Ni una parte de literal, ni una palabra clave, ni un identificador, ni cualquier otra
    consulta arbitraria pueden ser ligados utilizando los parámetros.
    Por ejemplo, no puede asociarse múltiples valores a un solo marcador de nombre entrante, en la cláusula IN() de una consulta SQL.
   
  
  
   Llamar a PDO::prepare() y
   PDOStatement::execute() para las consultas
   que deben ser ejecutadas varias veces con diferentes valores de
   parámetros optimiza el rendimiento de la aplicación permitiendo al controlador negociar
   del lado del cliente y/o servidor con la caché de consultas
   y las meta-informaciones. Además, llamar a PDO::prepare() y
   PDOStatement::execute() ayuda a prevenir ataques por
   inyección SQL eliminando la necesidad de proteger los parámetros manualmente.
  
  
   PDO emula las consultas preparadas / los parámetros ligados para los controladores
   que no los soportan nativamente, y puede también reescribir los
   parámetros nombrados o los marcadores en algo más
   apropiado, si el controlador soporta un estilo y no el otro.
  
  Nota: 
   
    El analizador utilizado para las declaraciones preparadas
    emuladas y para reescribir los parámetros nombrados o del estilo de punto
    de interrogación soporta el escape antislash no estándar para las comillas simples y dobles. Esto significa que las comillas finales que
    son precedidas por un antislash no serán reconocidas como tales, lo que puede
    resultar en una mala detección de los parámetros causando que la declaración
    preparada falle al ser ejecutada. Un contorno es no utilizar las consultas emuladas para tales consultas SQL, y evitar reescribir los parámetros utilizando un estilo de parámetro que es
    soportado nativamente por el controlador.
   
  
  
   A partir de PHP 7.4.0, los puntos de interrogación pueden ser escapados duplicándolos.
   Esto significa que la cadena ?? será traducida en ?
   al enviar la consulta a la base de datos.
  
  
 
  Parámetros
  
   
    
     - query
- 
      
       Debe ser un modelo de consulta SQL válido para el servidor de base de datos objetivo.
       
- options
- 
      
       Este array contiene una o más parejas clave=>valor para definir
       los valores de los atributos para el objeto PDOStatement
       que esta método devuelve. Puede utilizarse esto para definir el valor
       PDO::ATTR_CURSORaPDO::CURSOR_SCROLLpara solicitar un cursor desplazable.
       Algunos controladores tienen opciones específicas que pueden ser definidas
       en el momento de la preparación.
 
 
 
  Valores devueltos
  
   Si el servidor de base de datos prepara con éxito esta consulta,
   PDO::prepare() devuelve un objeto PDOStatement.
   Si el servidor de base de datos no logra preparar la consulta,
   PDO::prepare() devuelve false o emite una excepción
   PDOException (siguiendo el
   gestor de errores).
  
  Nota: 
   
    La emulación de consultas preparadas no comunica con el servidor de base
    de datos. También, la función PDO::prepare() no verifica
    la consulta.
   
  
  
 
 
  Ejemplos
  
   
    Ejemplo #1 Modelo de declaración SQL con parámetros nombrados
    
<?php
/* Ejecuta una consulta preparada pasando un array de valores */
$sql = 'SELECT nombre, color, calorias
    FROM fruta
WHERE calorias < :calorias AND color = :color';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calorias' => 150, 'color' => 'red']);
$red = $sth->fetchAll();
/* Las claves del array pueden ser prefijadas con dos puntos ":" también (opcional) */
$sth->execute([':calorias' => 175, ':color' => 'yellow']);
$yellow = $sth->fetchAll();
?>
     
    
   
    Ejemplo #2 Modelo de declaración SQL con marcadores
    
<?php
/* Ejecuta una consulta preparada pasando un array de valores */
$sth = $dbh->prepare('SELECT nombre, color, calorias
    FROM fruta
    WHERE calorias < ? AND color = ?');
$sth->execute([150, 'rojo']);
$red = $sth->fetchAll();
$sth->execute([175, 'amarillo']);
$yellow = $sth->fetchAll();
?>
     
    
   
    Ejemplo #3 Modelo de declaración SQL con un punto de interrogación escapado
    
<?php
/* nota: esto solo es válido para bases de datos PostgreSQL */
$sth = $dbh->prepare('SELECT * FROM issues WHERE tag::jsonb ?? ?');
$sth->execute(['feature']);
$featureIssues = $sth->fetchAll();
$sth->execute(['performance']);
$performanceIssues = $sth->fetchAll();
?>