2011-09-10 3 views
0

mysqliの拡張機能(手続き型)を使用していて、mysqli_query()関数でサブクエリを実行しているときに異常が発生しました。mysqli拡張を使用したネスト/サブクエリの構文エラー構文的に正しいですが

更新:多くのトラブルシューティングを行った結果、のエラーの原因が@ '@'を設定しています。原因はです。私はそのような '@ 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ループ内にあります。

フェッチされた配列のインデックスが0になるように、SQLの変数@は-1に設定されています。クエリは単に、hereのように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" 

感謝、お時間をいただき、ありがとうございます(PMAにコピーされたクエリがない場合は、PHPを使用して実行したときにのみエラーがあります)。

答えて

0

multi_query()を使用するつもりはありませんでしたか?

mysqli_queryは、私はちょうど私が研究の提案を参照していないが、有効なもはやあるんだけれども、はいそれをOUT-指し示すための複数のクエリ

+0

感謝を実行することはできませんので(質問は今すぐ更新)ありがとうございました。クエリでSET @ var = xが使用されている場合のみです。 – user885983

+0

@ user885983:はい、まさにその問題です。 'SET @ var = x'は最初のクエリであり、SELECTは2番目のクエリです。 – genesis

+0

私は参照しているので、私はクエリを分割する必要があります(マルチクエリを使用して?)、SET '@var = x'をストアドクエリとして保存しますか?クエリの後半でそれを参照してください。 – user885983