У меня есть этот запрос:
$query = " SET @points := -1; SET @num := 0; SELECT `id`,`rank`, @num := if(@points = `rank`, @num, @num + 1) as `point_rank` FROM `said` ORDER BY `rank` *1 desc, `id` asc";
Я использую этот запрос из php; давая мне эту ошибку:
У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'SET @num: = 0;
Если я скопирую и вставляю этот код в панель запросов phpmyadmin Sql, он отлично работает, но из строк кода php он не работает, кажется, что есть проблемы при настройке Vars.
Вместо того, чтобы устанавливать переменные в отдельном SET
, вы пытались использовать CROSS JOIN
:
$query = " SELECT `id`, `rank`, @num := if(@points = `rank`, @num, @num + 1) as `point_rank` FROM `said` CROSS JOIN (SELECT @points:=-1, @num:=0) c ORDER BY `rank` *1 desc, `id` asc";
Когда мы просматриваем ваш код, вы пытаетесь использовать синтаксис, связанный с хранимой процедурой MySql с PHP. Только конкретные запросы ANSI Sql будут выполняться через интерфейс PHP.
В противном случае вам нужно написать хранимую процедуру MySql и получить доступ к процедуре через объекты данных PHP – (PDO).
У вас могут быть полезные ссылки:
1> Хранимые процедуры, MySQL и PHP
2> http://www.joeyrivera.com/2009/using-mysql-stored-procedures-with-php-mysqlmysqlipdo/
попробуй это
$result1 = mysql_query("SET @points := -1 ;"); $result2 = mysql_query("SET @num := 0;"); $result3 = mysql_query($this->query); // <-- without the SET ... query
Из руководства:
mysql_query () отправляет уникальный запрос (несколько запросов не поддерживаются)
РЕДАКТИРОВАТЬ:
Вы должны использовать PDO или mysqli, поскольку mysql скоро устареет.