2010-05-05 135 views
1

我想在Zend中一样使用Zend公司,如MySQL问题

开关($过滤器2) { 情况下, '名称': 开关($过滤器1) { 案 'start_with': $搜索= “\”pd_name like?\“,'$ patient_search_name%'”; 休息;

       case 'contains': 
           $search = "'pd_name like ?', '%$patient_search_name%'"; 
         break; 

           case 'exact_match': 
           $search = "'pd_name = ?', $patient_search_name"; 
         break; 
         } 
     break; 

     case 'phone': 
         switch($filter1) 
         { 
           case 'start_with': 
           $search = "'pd_phone like ?', '$patient_search_name%'"; 
         break; 

           case 'contains': 
           $search = "'pd_phone like ?', '%$patient_search_name%'"; 
         break; 

           case 'exact_match': 
           $search = "'pd_phone = ?', $patient_search_name"; 
         break; 
         } 
    break; 

} 
    $select = $this->getDbTable()->select() 
        ->from("patient_data", 
         array('*')) 
         ->where("$search"); 

,但是当我看到查询记录其像

SELECT `patient_data`.* FROM `patient_data` WHERE ("pd_name like ?", 'bhas%') 

,其中作为?应该已经被替换的值....如何解决这个问题?

回答

0

这是行不通的。如果你想占位符被替换下场,你将需要两个参数传递给where(),如:

->where('pd_phone = ?', $patient_search_name); 

否则,将传递一个字符串将用于where子句原样,所以你会需要执行如下操作:

$search = "pd_phone = " . $patient_search_name; 

也就是说,将整个where子句构建为单个字符串。另外,使用switch语句中的select对象,如:

case 'exact_match': $select->where('pd_name = ?', $patient_search_name); 
        break; 

或只是有两个变量在每个case,如:

$placeholder = "pd_phone = ?"; 
$value = '%' . $patient_search_name . '%'; 
break; 
... 
->where($placeholder, $value); 
+0

哦okie我得到it..now我所写的Zend是对待像一个单一的变量.....我做了一个解决方法,并写为 $ search =“pd_name like'%$ patient_search_name%'” 它的工作....希望其适当... – Hacker 2010-05-05 09:47:06