私は mysqli の改良された拡張機能 (プロシージャル スタイル) を使用していますが、mysqli_query() 関数を介してサブクエリを実行しているときに異常に遭遇しました。
更新: トラブルシューティングを重ねた結果、エラーの原因は「@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 内で正しく実行され、同様の投稿が multi_query メソッドに向けられていますが、これは複数のクエリに分割できるクエリではないようです。より単純な解決策があるはずです(おそらく)
PHPクエリは次のとおりです。
$result = mysqli_query($link, $queryAsAbove);
これはエスケープされており、原因ではありませんが、クエリは動的です (ファイル名が渡されます)。最後に、クエリは mysqli_fetch_array ループ内にありますが、変数は同じ名前の競合についてチェックされています。
フェッチされた配列のインデックスが 0 になるように、sql @rank 変数は -1 に設定されます。クエリは、ここで説明するように、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 を使用して実行した場合にのみエラーが発生します)
お時間をいただき、ありがとうございました。