Bind Params


(Majuva68) #1

Siguiendo las indicaciones de seguridad de yii estoy intentando que todas mis sentencias sql

esten parametrizadas.

$tarea = Yii::app()->db->createCommand()->select(‘Fase’)->from(‘fase’)->

where(‘fase =:id,array(’:id’=>$id))->queryRow();

El problema lo tengo cuando tengo una combinacion de in y and

$tarea = Yii::app()->db->createCommand()->select(‘Fase’)->from(‘fase’)->

where(‘fase’=$id and ‘fase’ in (’$ids’)->queryRow();

hago

$tarea = Yii::app()->db->createCommand()->select(‘Fase’)->from(‘fase’)->

where(‘fase=:id’ and ‘fase’ in (’:ids’),array(:id=>$id,’:ids’=>$ids)->queryRow();

Me da un fallo de parametros

Alguien me puede poner un ejemplo de combinacion de and, in parametrizados.

Muchas gracias.


(Rgmf) #2

Yo utilizo DataProvider para construir las consultas pero, ¿no será por las comillas? A ver si funciona así:




$tarea = Yii::app()->db->createCommand()->select('Fase')->from('fase')->

where('fase=:id and fase in (:ids)',array(':id'=>$id,':ids'=>$ids)->queryRow();



Por cierto, un consejo: utiliza las etiquetas “code” cuando escribas código por aquí y así será más fácil leer los fragmentos de código ;)


(Majuva68) #3

No, no es por las comillas, se hace un lio con el array con el and y el in


(Jsanchezweb) #4

No se si habrá alguna manera de parametrizar un "in". Yo, en tu caso, lo podría hacer de dos maneras:

1.- $ids, según la utilizas tiene que ser un string ‘1,2,3’. Sería una cadena de texto.

2.- Definir la condition y el array en un foreach previo:

$ids = array(1,2,3);

$params = array();

$condition = “'fase=:id and fase in (”;

foreach( $ids as $value){

$condition .= ‘:ids’.$value.’,’;

$params[’:ids’.$value] = $value;

}

//Quita la ultima coma de conditions

$conditions = substr($condition, 0, strlen($conditions)-1).)’";

//Tu consulta

$tarea = Yii::app()->db->createCommand()->select(‘Fase’)->from(‘fase’)->

where($condition,$params->queryRow();

En principio debería funcionar. $ids no puede ir vacia y debe ser un array.