Синтаксические ошибки вложенных / подзапросов, использующие расширение mysqli; хотя синтаксически правильный - PullRequest
0 голосов
/ 10 сентября 2011

Я использую улучшенное расширение 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)

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

1 Ответ

0 голосов
/ 11 сентября 2011

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

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

...