Исправьте пожалуйста, тут написано https://developers.webasyst.ru/basics/model/
<h3 style="margin-top: 40px; margin-bottom: 0.3em; font-size: 1.45em; line-height: 1.2em; font-family: "PT Serif", Georgia, Times, serif; max-width: 800px;">Метод <code style="font-size: 23.2px;">query($sql, $params = null)</code></h3>
На самом деле:
/**
* Executes an SQL query and returns its result as an instance of class waDbResultSelect, waDbResultInsert,
* waDbResultUpdate, waDbResultDelete, or waDbResultReplace. To access the result of the SQL query, calling public
* methods of the class corresponding to the specific query type is necessary.
*
* @param string $sql SQL query to be executed, optionally containing placeholders as described for method exec()
* @see self::exec()
* @param mixed $params
* @return waDbResultDelete|waDbResultInsert|waDbResultReplace|waDbResultSelect|waDbResultUpdate
*/
public function query($sql)
Только SQL
Ошиблись, в функции есть ниже код выбора параметров.
Просто почему то перестал работать код:
$data = $model->query(".. in (s:ids) ...", array('ids'=>$ids))->fetchAll();
причем такой код:
$model->query(".. in (".$model->escape($ids).") ...")->fetchAll();
прекрасно работает.
Так а что в $ids ?
Если массив, то in (s:ids) разве не приведёт его к in ("Array") ?
Если строка с запятыми, то in ("1,2,3").
Можно попробовать без приведения типа: in (:ids)
Или точно рабочий вариант:
$data = $model->query(".. in (?) ...", array($ids))->fetchAll(); // $ids - массив
ids строка c id через запятую.
последнее интересно, попробеум, но помоему такого варианта в документации тоже нет ))
ну так если строка с id через запятую, то она точно не будет работать, т.к. в SQL станет in ("1,2,3").
Точнее будет работать, но только если такой id один: in ("1"). Ведь должно быть in (1,2,3) или in ("1","2","3").
все теперь понял, waModel приделает кавычки к параметру, тогда понятно почему не работало.
Всё ещё нужно что-то исправить? Что именно? Или уже всё прояснилось?
Все прояснилось, спасибо
Однако нужно сделать плейсхолдер для вариантов типа IN(1,2,3)
А то модераторы беснуются когда видят IN('.implode(',' $array).')
Еще им не нравится пулемет из запросов с перебором всех этих значений. Уже пару лет наверное прошу, а воз и ныне там. Все, что предлагается типа:
Это чистой воды костыли.
А всего лишь нужен плейсхолдер, который вставляет строку без кавычек, но эскейпит эту строку.
Разве его ещё нет?
Почему?
Пример выше не устроит?
надо проверить еще раз. я как только уже не пытался, везде были какие-то проблемы.
Почему костыли? Потому что неименованные плейсхолдеры - это путь к ошибкам и плохо читаемый код. Хотя конечно костыли это я наверное не правильтно выразился. Вы то сами при проверке захотите пересчитывать вопросики и запятые?
Главное — стабильность работы кода и отсутствие ошибок. Как вам в своём коде ориентироваться — ваша личная проблема, если выражаться прямо. Об удобстве модераторов слишком уж заботиться не надо.
То, что неименованные прейсхолдеры вам же могут быть неудобны, это, конечно, недостаток. В этом случае не используйте такие плейсхолдеры, если они создают вам неудобства.