Почему установка переменной group_concat_max_len в запросе приводит к ошибке в PHP bind_param ()? - PullRequest
1 голос
/ 07 мая 2019

У меня следующий запрос:

$query = <<<SQL
SELECT
      year,  
      count(*) AS `counter`, 
      GROUP_CONCAT(team) AS `team_list` 
    FROM
      team_list 
    WHERE year IS NOT NULL              
SQL;

if (!empty($sql)) { //$sql is an array of SQL WHERE statements "a IN (a,b,c)"
    $query .= ' AND ' . implode(' AND ', $sql);
} 


    $query .= 'GROUP BY year ORDER BY year';


    /////////////////////////////
    //EXECUTING THE QUERIES
    /////////////////////////////

    //Filter count to know how many 's' variable have to be bind to the prepared statement
    $filterCount = count($teams) + count($countries) + count($years) + count($rankings); //These are my ajax elements that are also used in the $sql variable

    //Data query
    $queryYears = $connection->prepare($query);
    $queryYears->bind_param(str_repeat('s', $filterCount), ...$teams, ...$countries, ...$years, ...$rankings);
    $queryYears-> execute();

Это все работает очень хорошо!

ПРОБЛЕМА

Однако, как только я пытаюсь ввести SET SESSION group_concat_max_len = 1000000; в начале моего запроса, я получаю следующую ошибку:

Fatal error: Uncaught Error: Call to a member function bind_param() on boolean

Я понимаю, что что-то не так с моим запросом, но при копировании и вставке его в мою СУБД запрос может быть выполнен без проблем.

Что я здесь не так делаю?

1 Ответ

3 голосов
/ 07 мая 2019

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

$connection->query("SET SESSION group_concat_max_len = 1000000;") or die($connection->error);
$queryYears = $connection->prepare($query) or die($connection->error);
// etc.

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

...