2011-09-10 37 views
0

我使用mysqli改進的擴展(過程式),並且在通過mysqli_query()函數運行子查詢時剛剛遇到異常。使用mysqli擴展嵌套/子查詢套用語法錯誤;儘管語法正確

更新:經過很多故障排除後,我發現原因的錯誤是設置'@rank'變量。我嘗試了一個沒有設置這樣的'@ var的查詢並且工作正常。但是他們需要...... - PHP不會正確地將「SET @example = x」傳遞給mysql,或者需要以某種方式轉義?

查詢如下:

SET @rank = -1; 
SELECT rank FROM (
SELECT @rank := @rank +1 AS rank, location, fileName 
FROM assets WHERE idUser = '32' 
ORDER BY UploadTimestamp DESC) AS rank_number 
WHERE photoFileName = 'filename.ext' 

查詢正確執行中的phpmyadmin和similar職位直接向multi_query方法然而,這似乎並沒有是可以拆分成多個查詢的查詢?它必然有一個簡單的解決方案(也許)

PHP的查詢是:

$result = mysqli_query($link, $queryAsAbove); 

查詢動態(它被傳遞一個文件名),雖然這是逃脫,而不是原因。 最後,查詢在mysqli_fetch_array循環內,儘管變量已經被檢查過同名衝突。

sql @rank變量設置爲-1,以便將獲取的數組索引爲0.該查詢僅用於標識SELECT查詢中的行號,如所述。

錯誤如下:

"You have an error...the right syntax to use near 'SELECT rank FROM (SELECT @rank := 
@rank +1 AS rank, location, filename' at line 2" 

謝謝您的時間,大加讚賞(僅在使用PHP的時候跑了,如果沒有查詢複製到PMA有錯誤)。

回答

0

您是不是打算使用multi_query()

因爲mysqli_query不能運行多個查詢

+0

感謝您指出了OUT-是的,儘管我只是引用一個建議我研究,但已不再有效(現在的問題更新)謝謝。這似乎是隻有當SET @var = x用於查詢 – user885983

+0

@ user885983時:是的,這正是這個問題。 'SET @var = x'是第一個查詢,SELECT是第二個。 – genesis

+0

我明白了,你是說我應該拆分查詢(使用multi_query?)並將SET'@var = x'存儲爲存儲查詢?然後用查詢的後半部分引用.. – user885983