Вложенные/подзапросы исправляют синтаксические ошибки с помощью расширения mysqli; хотя синтаксически правильно

Я использую улучшенное расширение mysqli (процедурный стиль) и только что столкнулся с аномалией при выполнении подзапросов через функцию mysqli_query().

Обновление: после долгих поисков и устранения неполадок я обнаружил, что причина ошибки заключается в установке переменной '@rank'. Я попробовал запрос без установки таких @var и отлично работает. Но они необходимы... - PHP не передает 'SET @example = x' корректно в mysql, или его нужно как-то экранировать?

Запрос выглядит следующим образом:

SET @rank = -1; 
SELECT rank FROM (
SELECT @rank := @rank +1 AS rank, location, fileName 
FROM assets WHERE idUser = '32'
ORDER BY UploadTimestamp DESC) AS rank_number 
WHERE photoFileName = 'filename.ext'

Запрос выполняется корректно в Phpmyadmin и similar сообщает напрямую к методу multi_query, однако это не похоже на запрос, который можно разделить на несколько запросов? У него должно быть более простое решение (возможно)

PHP-запрос:

$result = mysqli_query($link, $queryAsAbove);

Запрос является динамическим (ему передается имя файла), хотя это экранирование, а не причина. Наконец, запрос находится в цикле mysqli_fetch_array, хотя переменные были проверены на наличие конфликта одинаковых имен.

Для переменной sql @rank установлено значение -1, чтобы выбранный массив был проиндексирован как 0. Запрос просто используется для определения номера строки из запроса SELECT, как описано здесь.

Ошибка следующая:

"You have an error...the right syntax to use near 'SELECT rank FROM (SELECT @rank :=
@rank +1 AS rank, location, filename' at line 2"

(Ошибка только при запуске с использованием php, а не при копировании запроса в PMA)

Спасибо за ваше время, очень ценится.


person user885983    schedule 10.09.2011    source источник


Ответы (1)


Разве вы не хотели использовать multi_query()?

Поскольку mysqli_query не может выполнять более одного запроса

person genesis    schedule 10.09.2011
comment
Спасибо, что указали на это. Да, хотя я просто ссылаюсь на предложение, которое я исследовал, но оно больше недействительно (вопрос теперь обновлен), спасибо. Кажется, только когда в запросе используется SET @var = x - person user885983; 11.09.2011
comment
@ user885983: Да, это именно та проблема. SET @var = x — первый запрос, SELECT — второй. - person genesis; 11.09.2011
comment
Ясно, вы говорите, что я должен поэтому разделить запрос (используя multi_query?) и сохранить SET @var = x как сохраненный запрос? А затем сослаться на это во второй половине запроса. - person user885983; 11.09.2011
comment
I should therefore split the query (using multi_query?) это - person genesis; 11.09.2011
comment
извиняюсь может ошибаюсь но я не понимаю необходимость/как использовать multi_query например этот (хоть и ненужный) запрос использует вложенный запрос но без multi_query выполняет Ок: SELECT FileName FROM ( SELECT virtualFolderName, photoFileName FROM photos WHERE idUser = '67' ORDER BY UploadTimestamp DESC) AS mySubquery WHERE FileName = 'filename.txt' - person user885983; 11.09.2011