Я использую улучшенное расширение mysqli (процедурный стиль) и только что столкнулось с аномалией при выполнении подзапросов через функцию mysqli_query ().
Обновление: после долгих ошибок я обнаружил, что причина ошибки - установка переменной @rank. Я попытался запрос без установки таких '@ VAR' и работает нормально. Но они необходимы ... - Неужели PHP неправильно передает mysql 'SET @example = x' или нужно как-то экранировать?
Запрос выглядит следующим образом:
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 правильно, а аналогично отправляет сообщения прямо в метод 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)
Спасибо за ваше время, высоко ценится.