5

我有这个查询:

$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 时出现问题。

4

3 回答 3

6

而不是在单独的变量中设置变量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";
于 2013-04-01T11:38:43.487 回答
1

当我们查看您的代码时,您正在尝试使用 PHP 中与 MySql 存储过程相关的语法。只有 ANSI Sql 特定的查询将通过 PHP 接口执行。

否则,您必须编写 MySql 存储过程并通过 PHP 数据对象(PDO)访问该过程。

您可以使用以下链接帮助 -

1>存储过程、MySQL 和 PHP

2> http://www.joeyrivera.com/2009/using-mysql-stored-procedures-with-php-mysqlmysqlipdo/

3> http://php.net/manual/en/pdo.prepared-statements.php

于 2013-04-01T11:36:59.053 回答
-1

试试这个

$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 很快就会被弃用。

于 2013-04-01T11:34:26.950 回答