как передать список (лист) значений
Macik |
|
---|---|
[кому лень читать подробности - в конце страницы самая суть и вопрос] Стараюсь использовать запросы в БД через $cotDB->query($query,$parameters); Т.е. передавая параметры массивом, а не забивая их на прямую в текст запроса. В общем проблем нет, но частенько надо передать как параметр список опций, например: ... and user_region in ('ECE','RUS','USA') ... Естественно список может быть различной длины, и передать его простым параметром нельзя. Для этих нужд немного расширил database.php, в частности функцию «_prepare» во внутреннем цикле: было: $placeholder = is_int($key) ? '?' : ':' . $key; $value = is_int($val) ? $val : $this->quote($val); $query = preg_replace('`' . preg_quote($placeholder) . '`', $value, $query, 1); стало (выделил добавленное): $placeholder = is_int($key) ? '?' : ':' . $key; if (!is_array($val)) { $value = is_int($val) ? $val : $this->quote($val); } else // added array processing { $value = array(); foreach ($val as $v) { $value[] = is_int($v) ? $v : $this->quote($v); } $value = implode(',',$value); } $query = preg_replace('`' . preg_quote($placeholder) . '`', $value, $query, 1); Т.е. просто добавил проверку, и если передается массив - формируем соотв. строку со значениями массива. ------- Однако в $cotDB->query есть проверка $this->_prepare_itself и если версия клиентской библиотеки => 5.1.0 вместо «_prepare» будет вызван «_bindParams», в котором используются родной PDOStatement::bindValue и я ума не приложу как изменить _bindParams , аналогичным образом (как описано выше), что бы была возможность передавать в параметре списки значений.
https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F |
|
This post was edited by Macik (2012-07-16 14:27, 12 years ago) |
Trustmaster |
|
---|---|
Обходить конём, то есть сразу (ещё в query/insert/update/delete) вставлять массив в запрос и убирать его из списка параметров, после чего передавать полученный запрос и оставшиеся параметры далее по цепочке. Главный вопрос - стоит ли оно того? May the Source be with you!
|
Macik |
|
---|---|
Да... Тогда проще остаться с «вечным» _prepare_itself = trur; и поправить только «_prepare». https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F |
|
This post was edited by Macik (2012-07-16 14:28, 12 years ago) |