Как сделать необработанный запрос в kohana freamwork

Я хочу сделать пакет со списком запросов.

Это запрос на обновление, например:

UPDATE table 
SET column = XXX 
WHERE column = XXX AND column2 = XXX;

UPDATE table 
SET column = XXX 
WHERE column = XXX AND column2 = XXX;

UPDATE table 
SET column = XXX 
WHERE column = XXX AND column2 = XXX;

У меня есть эти 1000 запросов в одном пакете. Теперь я хочу делать запросы.

Я пытаюсь это сделать, но безуспешно, потому что каждый раз получаю такую ​​ошибку:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом...

Я копирую этот запрос и передаю его в phpmyadmin, и я это делаю. Эти запросы работают!

У меня есть переменная с подготовленными запросами, и я пытаюсь сделать это по-другому.

Database::instance()->query(NULL,$sql);
DB::query(5,$sql)->execute();
DB::query(Database::UPDATE,DB::expr($sql))->execute();
DB::query(Database::UPDATE,$sql)->execute();

Но это не работает ;/

Кто-нибудь знает, как это сделать?


person Marek Bochenek    schedule 25.01.2017    source источник


Ответы (1)


Просто вызовите метод запроса из экземпляра базы данных:

/** @var Database $db */
$db = Database::instance();
$db->query(Database::UPDATE, 'UPDATE table SET column = XXX WHERE column = XXX AND column2 = XXX;');

Но если вы хотите выполнить несколько операторов SQL в одном запросе, это невозможно из коробки. По умолчанию Kohana использует старый API mysql, а mysql_query не поддерживает несколько запросов в одном вызове.

Если вы хотите использовать несколько операторов SQL, я знаю 3 способа:

  1. Некоторое время назад для Kohana я видел модуль для поддержки mysqli, вы можете попробовать его найти и модифицировать: добавить в него новый метод, который будет использовать http://php.net/manual/en/mysqli.multi-query.php mysqli::multi_query может выполнять несколько операторов SQL в одном запросе.
  2. Или вы можете переключиться на использование PDO. Для этого вы должны внести изменения в файл конфигурации вашей базы данных, в соответствии с документацией Kohana, добавить карту для столбцов в моделях.
  3. Или создайте новое соединение PDO, настроив его только для этого запроса (если вы не используете транзакцию, это будет проще, чем вариант 2).

Также для вариантов 2 и 3 вы должны настроить некоторые параметры PDO: https://stackoverflow.com/a/6461110/419665

P.S. Для вызова экземпляра базы данных по имени конфигурации:

Database::instance('config_name');
person yan_kos    schedule 02.02.2017