Я использую улучшенное расширение 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)
Спасибо за ваше время, очень ценится.