Ошибка в документации

Александр Тарасенко

Исправьте пожалуйста, тут написано 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

19 января 2017
  • Александр Тарасенко 19 января 2017 13:09

    Ошиблись, в функции есть ниже код выбора параметров.

    Просто почему то перестал работать код:

    $data = $model->query(".. in (s:ids) ...", array('ids'=>$ids))->fetchAll();

    причем такой код:

    $model->query(".. in (".$model->escape($ids).") ...")->fetchAll();

    прекрасно работает.

  • Eugen Nichikov 19 января 2017 14:04

    Так а что в $ids ?

    Если массив, то in (s:ids) разве не приведёт его к in ("Array") ?

    Если строка с запятыми, то in ("1,2,3").

    Можно попробовать без приведения типа: in (:ids)

    Или точно рабочий вариант:

    $data = $model->query(".. in (?) ...", array($ids))->fetchAll(); // $ids - массив

  • Александр Тарасенко 19 января 2017 14:09

    ids строка c id через запятую.

    последнее интересно, попробеум, но помоему такого варианта в документации тоже нет ))

  • Eugen Nichikov 19 января 2017 14:42

    ну так если строка с id через запятую, то она точно не будет работать, т.к. в SQL станет in ("1,2,3").

    Точнее будет работать, но только если такой id один: in ("1"). Ведь должно быть in (1,2,3) или in ("1","2","3").

  • Александр Тарасенко 19 января 2017 14:46

    все теперь понял, waModel приделает кавычки к параметру, тогда понятно почему не работало.


  • Михаил Ушенин Webasyst 19 января 2017 15:07

    Всё ещё нужно что-то исправить? Что именно? Или уже всё прояснилось?

  • Александр Тарасенко 19 января 2017 15:08

    Все прояснилось, спасибо

  • ITFrogs 24 января 2017 00:12

    Однако нужно сделать плейсхолдер для вариантов типа IN(1,2,3)

    А то модераторы беснуются когда видят IN('.implode(',' $array).')

    Еще им не нравится пулемет из запросов с перебором всех этих значений. Уже пару лет наверное прошу, а воз и ныне там. Все, что предлагается типа:

    $data = $model->query(".. in (?) ...", array($ids))->fetchAll(); // $ids - массив

    Это чистой воды костыли.

    А всего лишь нужен плейсхолдер, который вставляет строку без кавычек, но эскейпит эту строку.

  • Михаил Ушенин Webasyst 24 января 2017 09:39
    Однако нужно сделать плейсхолдер для вариантов типа IN(1,2,3)

    Разве его ещё нет?

    $model->query('SELECT * FROM table WHERE id IN (i:ids)', array('ids' => $ids))->fetchAll();
    Еще им не нравится пулемет из запросов с перебором всех этих значений. Уже пару лет наверное прошу, а воз и ныне там. Все, что предлагается типа:
    $data = $model->query(".. in (?) ...", array($ids))->fetchAll(); // $ids - массив
    Это чистой воды костыли.

    Почему?

    А всего лишь нужен плейсхолдер, который вставляет строку без кавычек, но эскейпит эту строку.

    Пример выше не устроит?

  • ITFrogs 24 января 2017 10:03

    надо проверить еще раз. я как только уже не пытался, везде были какие-то проблемы.

  • ITFrogs 24 января 2017 10:06

    Почему костыли? Потому что неименованные плейсхолдеры - это путь к ошибкам и плохо читаемый код. Хотя конечно костыли это я наверное не правильтно выразился. Вы то сами при проверке захотите пересчитывать вопросики и запятые?

  • Михаил Ушенин Webasyst 24 января 2017 10:12

    Главное — стабильность работы кода и отсутствие ошибок. Как вам в своём коде ориентироваться — ваша личная проблема, если выражаться прямо. Об удобстве модераторов слишком уж заботиться не надо.

  • Михаил Ушенин Webasyst 24 января 2017 10:13

    То, что неименованные прейсхолдеры вам же могут быть неудобны, это, конечно, недостаток. В этом случае не используйте такие плейсхолдеры, если они создают вам неудобства.



Чтобы добавить комментарий, зарегистрируйтесь или войдите