Не понимаю. Есть вот такой запрос (нужно выбрать позицию игрока ± 2 позиции, лучше придумать не вышло).
$uid = 2;<br/>
$rate_table = $this->db->query('SET @rank=0;<br/>
CREATE TEMPORARY TABLE `rank_table` AS (<br/>
SELECT @rank:=@rank+1 AS rank,`users`.*,IFNULL(SUM(`g`.`units`),0) as sum<br/>
FROM `users`<br/>
LEFT OUTER JOIN (SELECT * FROM `game_rounds` WHERE `game_rounds`.`final`=1) g ON `users`.`id`=`g`.`uid`<br/>
GROUP BY `users`.`id`<br/>
ORDER BY `sum` DESC<br/>
);<br/>
SET @user_rank = (SELECT `rank` FROM `rank_table` WHERE `id`='.$uid.');<br/>
SELECT * FROM `rank_table` WHERE `rank`<=@user_rank+2 AND `rank`>=@user_rank-2')->result();
Когда прогоняю его через PhpMyAdmin — получаю вполне годный и правльный результат.
Когда кормлю его скрипту (в примере — через Codeigniter) — выбивает ошибку синтаксиса:
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 'CREATE TEMPORARY TABLE `rank_table` AS ( SELECT @rank:=@rank+1 AS rank,`users`' at line 2
При этом, он показывает, какой запрос отправил в базу, я его просто копирую, вставляю в PhpMyAdmin — и получаю результат.
Кормлю запрос через PDO->query() — возвращает пустой результат (т.е. в возвращаемом PDO объекте есть только сам запрос)
Я НИЧЕГО НЕ ПОНИМАЮ!
За помощь в долгу не останусь.
Спасибо