ホームページ >データベース >mysql チュートリアル >「Field = 0」を検索すると MySQL がすべての行を返すのはなぜですか?

「Field = 0」を検索すると MySQL がすべての行を返すのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-24 08:49:01295ブラウズ

Why Does MySQL Return All Rows When Searching for 'Field = 0'?

MySQL の予期しない動作について: なぜ 'mySQL は field=0 のときにすべての行を返す'

MySQL で条件を指定してテーブルをクエリする場合フィールドが 0 に等しい場合、何も行が返されずにすべての行が返されるという予期しない結果が発生する可能性があります。これにより、データの精度とセキュリティに関する懸念が生じる可能性があります。

問題の原因

この動作は、MySQL が数値比較を評価するときに文字列ベースのフィールドを暗黙的に整数に変換するために発生します。文字列が整数に変換できない場合(今回の場合は「0」など)、0 が返されます。その結果、クエリは実質的に「WHERE email=0」となり、空または数値以外の電子メール アドレスを持つすべての行と一致します。

セキュリティへの影響

攻撃者が悪用してバイパスできるため、この問題はセキュリティに重大な影響を与える可能性があります。セキュリティチェック。ターゲット レコードの数値フィールドを数値以外の値に設定すると、基本的に条件を無効にして、持つべきではないデータにアクセスできるようになります。

問題の回避

この問題を回避するには、文字列フィールドを文字列値と比較し、数値フィールドを数値と比較することが重要です。あなたの場合、クエリは次のように変更する必要があります:

SELECT * FROM table WHERE email='0';

「0」を一重引用符で囲むことにより、整数ではなく文字列として扱われるように指定します。

その他の考慮事項

  • 予期しない変換を防ぐために、常に列に適切なデータ型を使用してください。
  • 文字列を比較するときは、' の代わりに 'LIKE' 演算子を使用することを検討してください。 =' は、部分的な値またはパターンと一致します。
  • SQL インジェクション攻撃を防ぐには、バインドされたパラメーターを持つパラメーター化されたクエリを使用します。

以上が「Field = 0」を検索すると MySQL がすべての行を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。