Joomla! (с K2) MySql - Ошибка при генерации
Я не понимаю... Я много тестировал, но не понимаю, почему появляется ошибка SQL...
В моем случае я использую функцию для генерации mysql-запроса, чтобы получить все дополнительные поля из базы данных (K2 - Component).
Используется так:
public static function readExtraFields ($fields, $as = 'array') {
if (!is_array($fields)) $fields = json_decode($fields);
$result = array();
$whereId = array();
$allFieldValues = array();
foreach ($fields as $field) {
$whereId[] = "`id`='".$field->id."'";
$allFieldValues[$field->id] = $field->value;
}
$query = "SELECT * FROM `#__k2_extra_fields` WHERE " . implode(" OR ", $whereId);
$queryResult = self::execQuery($query);
[...]
В этом методе запрос будет сгенерирован так (я его распечатал)
SELECT * FROM `#__k2_extra_fields` WHERE `id`='1' OR `id`='2'
Это отлично. Когда я выполняю метод execQuery с данным запросом, появляется эта ошибка:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 SQL=SELECT * FROM `j7req_k2_extra_fields` WHERE
Вот и все... Я не понимаю. Мой метод для выполнения моего MySQL-запроса:
public static function execQuery ($query) {
$db = JFactory::getDbo();
$db->setQuery($query);
$result = $db->loadObjectList();
return $result;
}
Для тестирования я распечатал Query (выше) и установил $ query для напечатанного запроса, и он работает без каких-либо проблем, например, как он должен работать... Итак, заданный запрос правильный... в чем может быть проблема?
Редактировать 1 В моем методе execQuery я распечатал $ db. Данный реуслит дан (вы можете найти запрос внизу этого объекта)
JDatabaseDriverMysqli Object
(
[name] => mysqli
[nameQuote:protected] => `
[nullDate:protected] => 0000-00-00 00:00:00
[_database:JDatabaseDriver:private] => podopraxis
[connection:protected] => mysqli Object
(
[affected_rows] => 1
[client_info] => mysqlnd 5.0.11-dev - 20120503 - $Id: bf9ad53b11c9a57efdb1057292d73b928b8c5c77 $
[client_version] => 50011
[connect_errno] => 0
[connect_error] =>
[errno] => 0
[error] =>
[error_list] => Array
(
)
[field_count] => 1
[host_info] => localhost via TCP/IP
[info] =>
[insert_id] => 0
[server_info] => 5.6.16
[server_version] => 50616
[stat] => Uptime: 48979 Threads: 1 Questions: 6461 Slow queries: 0 Opens: 163 Flush tables: 1 Open tables: 155 Queries per second avg: 0.131
[sqlstate] => 00000
[protocol_version] => 10
[thread_id] => 203
[warning_count] => 0
)
[count:protected] => 45
[cursor:protected] =>
[debug:protected] =>
[limit:protected] => 0
[log:protected] => Array
(
)
[timings:protected] => Array
(
)
[callStacks:protected] => Array
(
)
[offset:protected] => 0
[options:protected] => Array
(
[driver] => mysqli
[host] => localhost
[user] => root
[password] =>
[database] => podopraxis
[prefix] => j7req_
[select] => 1
[port] => 3306
[socket] =>
)
[sql:protected] => SELECT * FROM `#__k2_extra_fields` WHERE `id`='1' OR `id`='2'
[tablePrefix:protected] => j7req_
[utf:protected] => 1
[errorNum:protected] => 0
[errorMsg:protected] =>
[transactionDepth:protected] => 0
[disconnectHandlers:protected] => Array
(
)
)
1 ответ
Похоже, что ваш запрос, запущенный в функции execQuery(), пропускает оператор условия после условия запроса "WHERE".
Пожалуйста, убедитесь, что ниже часть условия входит в ваш запрос:
`id`='1' OR `id`='2'
дайте мне знать, если я не поправлюсь по вашему вопросу?
Также попробуйте разместить здесь весь объект $db, напечатав, как показано ниже:
echo "<pre />";print_r($db);exit;