Zend как проблема MySQL - PullRequest
       1

Zend как проблема MySQL

1 голос
/ 05 мая 2010

Я пытаюсь использовать как в Zend

Переключатель ($ filter2) { название дела: Переключатель ($ filter1) { case 'start_with': $ search = "\" 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%')

где как? надо было заменить на значение .... как это решить ??

1 Ответ

0 голосов
/ 05 мая 2010

Это не сработает. Если вы хотите заменить заполнитель, вам нужно передать два параметра в where(), например ::

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

В противном случае передаваемая вами единственная строка будет использоваться для предложения where как есть, поэтому вам потребуется выполнить что-то вроде:

$search = "pd_phone = " . $patient_search_name;

То есть, построить весь оператор where как одну строку. В качестве альтернативы используйте объект select в операторе switch, например ::

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

Или просто иметь две переменные в каждой case, например ::

$placeholder = "pd_phone = ?";
$value = '%' . $patient_search_name . '%';
break;
...
->where($placeholder, $value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...