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;
Другие вопросы по тегам