RSS

  • YouTube
  • LinkedIn
  • Google

Enlace varios valores en la instrucción SQL de PDO (PDOStatement)

A veces necesitamos buscar un valor único a través de varias columnas al crear instrucciones SQL.

Supongamos la siguiente tabla

  • [ENTITY_ONE]
    • ID
    • COLUMN_A
    • COLUMN_B
    • COLUMN_C
    • COLUMN_D
    • COLUMN_E

Si necesitamos buscar un valor en columnas B,D y E necesario utilizaremos la siguiente instrucción

SELECCIONAR ID, COLUMN_A,(...Columnas..), COLUMN_E 
FROM ENTITY_ONE WHERE COLUMN_B LIKE '%search_value%' OR COLUMN_D LIKE '%search_value%' OR COLUMN_E LIKE '%search_value%';

Código PHP que podemos hacer

$q ' '%search_value%';
$sql ? "Seleccione * DESDE ENTITY_ONE DONDE COLUMN_B COMO '$q' O COLUMN_D COMO '$q' O COLUMN_E COMO '$q'; 
$pdo - nueva DOP($Dsn, $Usuario, $Pasar); 
$stmt = $pdo->;Consulta($Sql);

Bien, this can work but we know that isn’;t el mejor enfoque. Necesitamos utilizamos valores vinculantes para evitar SQL injection y otras golosinas que.

Por lo tanto, el código puede ser modificado a

$q ' '%search_value%'; 
$sql ? "Seleccione * DE ENTITY_ONE DONDE COLUMN_B COMO ? O COLUMN_D COMO ? O COLUMN_E COMO ?; 
$args ? [$Q, $Q, $Q]; // Necesitamos una entrada para cada "?" on instruction
$pdo = new PDO($Dsn, $Usuario, $Pasar); 
$stmt = $pdo->;Preparar($Sql);
$stmt->;Ejecutar($Args);

Mucho mejor, pero, al generar instrucciones SQL complejas, things can be confusing with lots of arguments and don’;no se olvide: ASUNTOS DE ORDEN.

Felizmente PDO puede enlazar valores en orden diferente cuando usando el nombre enlaces.

$q ' '%search_value%'; 
$sql ? "Seleccione * DE ENTITY_ONE DONDE COLUMN_B COMO :first_arg o COLUMN_D COMO :second_arg o COLUMN_E COMO :third_arg; 

$pdo - nueva DOP($Dsn, $Usuario, $Pasar); 
$stmt = $pdo->;Preparar($Sql); 
// One way
$args = [':first_arg' =>; $Q, ':third_arg' =>;$Q, ':second_arg' =>; $Q]; // Necesitamos una entrada para cada ":Nombre" on instruction 
$stmt->;Ejecutar($Args); 
// Another way
$stmt->;bindValue(':third_arg'. $Q);
$stmt->;bindValue(':first_arg', $Q); 
$stmt->;bindValue(':second_arg', $Q);

$stmt->;Ejecutar(); 

Hmm, seems that this isn’;t bueno. Sólo cambiamos el uso de 1-marcador de posición indexada a un :marcador de posición nombre. There’;s ningún beneficio más allá del código legible y la posibilidad de enlazar en cualquier orden.

Sí, pero ahora podemos hacer la mejor aproximación cuando se utiliza un término de búsqueda única en varias columnas. Podemos utilizar solamente un lazo a uno o más :named placeholders ’;causa PDO es inteligente y listo. Mira aquí nuestro código final.

$q ' '%search_value%'; 
$sql ? "Seleccione * DE ENTITY_ONE DONDE COLUMN_B COMO :unique_arg o COLUMN_D COMO :unique_arg o COLUMN_E COMO :unique_arg; 
$pdo - nueva DOP($Dsn, $Usuario, $Pasar); 
$stmt = $pdo->;Preparar($Sql); 
// One way 
$args = [':unique_arg' =>; $Q]; // Podemos atar a todos :name with only one term 
$stmt->;Ejecutar($Args); 
// Another way 
$stmt->;bindValue(':unique_arg', $Q); 
$stmt->;Ejecutar(); 

Puede ahorrar un montón de escribir al escribir muchas instrucciones SQL utilizando el mismo argumento.

Contesta

Su dirección de correo electrónico no se publicará. Los campos obligatorios están marcados *

Este sitio utiliza Akismet para reducir el spam. Aprender cómo se procesaron los datos de comentario.