majuva68
(Majuva68)
December 10, 2012, 11:27am
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
(Rgmf)
December 10, 2012, 12:48pm
2
majuva68:
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.
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
(Majuva68)
December 10, 2012, 1:22pm
3
rgmf:
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
No, no es por las comillas, se hace un lio con el array con el and y el in
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.