2010-11-08 105 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();