Я создаю расширенный поиск и хотел проходной мои запросы, добавив их в массив следующим образом:Как избежать вещей в zend literal?
private $searchFields = [
'as_first_name' => 'users.first_name like "%VALUE%"',
'as_last_name' => 'users.last_name like "%VALUE%"',
'as_payment_history_invoice_num' => 'users.user_id = (SELECT user_id from payment_history where payment_history.invoice_number = "VALUE" LIMIT 1)',
'as_building_num' => 'property_units.building_number like "%VALUE%"',
'as_residents_email' => 'users.email like "%VALUE%"',
'as_property_name' => 'property.name like "%VALUE%"',
'as_phone_num' => 'REPLACE(REPLACE(REPLACE(REPLACE(users.phone, " ", ""), "(", ""), ")", ""), "-", "") = "VALUE"',
'as_unit_num' => 'property_units.unit_number = "VALUE"',
'as_account_status' => 'user_status.status_name = "VALUE"'
];
так на поиске я делаю что-то вроде ..
if (array_key_exists($key, $this->searchFields)) {
$form->get($key)->setValue($val);
$where->NEST->literal(str_replace('VALUE', urldecode($val), $this->searchFields[$key]))->UNNEST;
}
но проблема в том, что я ничего не избегаю. Нехорошо. Как я могу использовать одну и ту же структуру, но также избегать вещей.
Я думаю, что это ближе .. но я получаю. SQLSTATE [HY093]: Недопустимый номер параметра: количество связанных переменных не совпадает с числом токенов Я связываю один параметр для каждого утверждения, поэтому не уверен, почему это происходит. – hamobi
вам нужно избавиться от котировок вокруг? .. и вам нужно добавить% вокруг подобных значений. – hamobi
@hamobi Я не помню, как заполнители были процитированы, имеет смысл. Кроме того, в качестве примечания, заполнители могут быть в двух формах: positional ('?') И named (': placeholder_name'). Если вы используете именованные заполнители, вам необходимо предоставить ассоциативный массив для значений (второй аргумент), где ключевое совпадение с именем заполнителя, с именем placeholder может появляться несколько раз – Xerkus