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  
          
              
                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  
          
              
                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.