2010-11-08 107 views
-1

我困惑。下面的MySQL查询:两个简单的MySQL语句导致语法错误

SET @a := 0; 

SELECT * 
    FROM users; 

给出了错误:

Invalid query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM users' at line 2`

当我切换语句的顺序,我得到了同样的错误,再次上线2(即使我交换他们)

然而,无论是线路本身运行正常。什么可能造成这种情况?

+0

你怎么尝试执行此查询?从MySQL控制台?许多mysql客户端不接受多重查询。 – zerkms 2010-11-08 04:56:31

回答

2

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

+0

+1:还有,为什么声明没有被使用的变量? – 2010-11-08 04:58:35

+0

我试图在未来的声明中使用一个变量,但不断收到语法错误,所以我一直剥离部分,直到我离开时仍然出现错误,此时我在这里注册请求你们:P – maackle 2010-11-08 05:00:29

+1

@maackle :好吧,你如何执行这些查询? – zerkms 2010-11-08 05:03:49

1

您可以在一个查询,如下做到这一点:

诀窍

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

或者是adventerous和使用存储过程,所以它总是一个电话:P

存储过程

drop procedure if exists list_users; 
delimiter # 

create procedure list_users() 
begin 
set @a = 0; 
select @a:[email protected]+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();