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を使用して実行したときにのみエラーがあります)。
感謝を実行することはできませんので(質問は今すぐ更新)ありがとうございました。クエリでSET @ var = xが使用されている場合のみです。 – user885983
@ user885983:はい、まさにその問題です。 'SET @ var = x'は最初のクエリであり、SELECTは2番目のクエリです。 – genesis
私は参照しているので、私はクエリを分割する必要があります(マルチクエリを使用して?)、SET '@var = x'をストアドクエリとして保存しますか?クエリの後半でそれを参照してください。 – user885983