两个简单的MySQL语句导致语法错误

时间:2010-11-08 04:48:14

标签: sql mysql mysql-error-1064

我很困惑。以下MySQL查询:

SET @a := 0;   

SELECT * 
  FROM users;

给出错误:

  

查询无效:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第2行的“SELECT * FROM users”附近使用正确的语法

当我切换语句的顺序时,我再次在第2行得到同样的错误(即使我切换了它们)

但是,任何一行都可以运行。什么可能导致这种情况?

2 个答案:

答案 0 :(得分:2)

我打赌你试图在mysql_query()(或任何编程语言的某些类似函数)中执行此查询,但它只接受单个查询。因此,解决方案是将此查询拆分为2个调用。

答案 1 :(得分:1)

您可以在一个查询中执行以下操作:

技巧

select @a:=@a+1, u.* 
from 
 users u 
join (select @a:=0) a

或者是冒险的,并使用存储过程,因此它总是一次调用:P

存储过程

drop procedure if exists list_users;
delimiter #

create procedure list_users()
begin
 set @a = 0;
 select @a:=@a+1, u.* from users u;
end #

delimiter ;

call list_users();

PHP脚本

$conn = new mysqli("localhost", "foo_dbo", "pass", "foo_db", 3306);

$result = $conn->query("call list_users()");

while($row = $result->fetch_assoc()){
 ...
}

$result->close();
$conn->close();