mal uso de parámetros en un array con consultas preparadas con cakephp y mysql

Vaya chorro de título….. qué es esto ?

Pues explicado muy muy rápido si quiero preparar una consulta bonita para lanzar a la base de datos ( mysql ) y que tenga parámetros en vez de hacer chapuzas y guarrerías varias que se ven en muchos sitios , uniendo strings y demás…. se pueden usar parámetros.

Es muy sencillo, queda de esta forma :

[sql]

SELECT Customer.name FROM customers Customer WHERE Customer.id = :customer_id

[/sql]

Si veis ‘:customer_id’ no pertenece al standard de SQL , es un parámetro . De forma que le puedo pasar a la consulta una variable como cuando usamo printf y Mysql construirá la query completa, además de hacer cosas con los índices y demás … que no vamos a tratar ahora.

Pues bien. tengo aquí un caso real de una cosa que me ha pasado hoy, quería pasar por parámetros un array de parámetros de forma que quería buscar ‘customer.id IN ( :listaIDs ) ‘. Os adelanto ya que no se puede pasar un parámetro que sea un string de integers separados por coma.

[php]

public function getCustomersById( $objectIds = array() ) {
$sql = ‘
SELECT
Customer.*
FROM
customers Customer
WHERE
Customer.id IN ( :objectIds ) ‘;

$db = $this->getDataSource();

$objectIds= join( ‘,’, $object_id );
$params = array (
‘objectIds’ => $objectIds
);

return  $db->fetchAll($sql, $params  )

}

[/php]

Pues esta consulta sólo retorna los resultados que coincidan con el último valor del array. Si veis hago un join() para unir los valores y pasarlos como parámetro. Pues Mysql se lo come y sólo utiliza el último, tampoco da error. Qué alegrías que nos da la programación 😀

 


Publicado

en

,

por

Etiquetas:

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.