SELECT
@a -- Final Result (3)
FROM
(
SELECT (@a :="") -- Resetting the variable after each run, (1)
(
SELECT @a -- Does really nothing. This can be anything
FROM information_schema.schemata
WHERE (@a) IN (@a := CONCAT(@a, schema_name, '<br>')) -- This will be executed for each row. But none of the rows will match. At the end, @a will have the desired output (2)
)
) a
、SELECT * from information_schema.schemata
を実行し、出力
(1)、(2)を参照してください、私たちはクエリを分割した場合(3)これ、実行優先順位
を示し、:EDIT
SET @a = ""; SELECT 1 FROM information_schema.schemata WHERE (@a) IN (@a := CONCAT(@a, schema_name, '<br>')); SELECT @a;
以下に示すように起こることです質問:行のいずれも一致しない場合、変数 "a"は望ましい出力をどのようにしますか?
は、私たちはmytable
は、10件のレコードを持っており、somecondition
は、すべてのインデックスを使用していない場合は、somecondition
が10回実行されます小さなクエリselect * from mytable where (
somecondition)
を見てみましょう。各実行に基づいて、結果がtrue/1の場合、その行が表示されます。これは、SQL select
ステートメントの単純な理論です。
今、あなたは(@a) IN (@a := CONCAT(@a, schema_name, '<br>'))
とsomecondition
を置き換えることが、あなたはそれがSQLインジェクションではありません答え
を取得します。それはただのSQL –
ええ、私はSQLインジェクションを学び、フローにインジェクションを含めようとしていました。 – Akash
さて、結果は何ですか? –