ホームページ >データベース >mysql チュートリアル >「Field = 0」を検索すると MySQL がすべての行を返すのはなぜですか?
MySQL の予期しない動作について: なぜ 'mySQL は field=0 のときにすべての行を返す'
MySQL で条件を指定してテーブルをクエリする場合フィールドが 0 に等しい場合、何も行が返されずにすべての行が返されるという予期しない結果が発生する可能性があります。これにより、データの精度とセキュリティに関する懸念が生じる可能性があります。
問題の原因
この動作は、MySQL が数値比較を評価するときに文字列ベースのフィールドを暗黙的に整数に変換するために発生します。文字列が整数に変換できない場合(今回の場合は「0」など)、0 が返されます。その結果、クエリは実質的に「WHERE email=0」となり、空または数値以外の電子メール アドレスを持つすべての行と一致します。
セキュリティへの影響
攻撃者が悪用してバイパスできるため、この問題はセキュリティに重大な影響を与える可能性があります。セキュリティチェック。ターゲット レコードの数値フィールドを数値以外の値に設定すると、基本的に条件を無効にして、持つべきではないデータにアクセスできるようになります。
問題の回避
この問題を回避するには、文字列フィールドを文字列値と比較し、数値フィールドを数値と比較することが重要です。あなたの場合、クエリは次のように変更する必要があります:
SELECT * FROM table WHERE email='0';
「0」を一重引用符で囲むことにより、整数ではなく文字列として扱われるように指定します。
その他の考慮事項
以上が「Field = 0」を検索すると MySQL がすべての行を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。