2

例えば:

テーブル :user

列 : user_id(型は int)

SELECT * FROM user WHERE user_id = '10xyz' 

の同じ結果を出している

SELECT * FROM user WHERE user_id = '10'

入力値は整数ではありませんが、この場合はエラーになりません。

4

3 に答える 3

10

同じ結果が得られる理由は、文字列から末尾の文字をMySQL自動的に削除し、暗黙的に整数に変換するためです。

于 2013-02-04T06:04:29.863 に答える
3

すべてのコードを変更したくないが、データベース クエリがすべて 1 つまたはいくつかのサブルーチンを通過している場合は、ステートメント ハンドル (例: if ( $sth->{mysql_warning_count} ) ...) を使用した後に警告をチェックするようにそれらを変更できます。

または、警告をエラーに昇格させて、自動的にそれを行う DBI サブクラスを作成することもできます。もしそうなら、他の多くの人がそのようなことを利用しています。「10xyz」のようなものを整数フィールドに更新または挿入するときに、警告の代わりにエラーを与える構成設定がありますが、それよりも広いものはありません。親愛なる Oracle はそれをNot a Bugと見なします。たぶん、MariaDBはより良い(またはできる)のでしょうか?

于 2013-02-04T07:24:57.227 に答える
1

データベース内の user_id のデータ型は INT です

そのため、エラーではなく同じ出力が得られる理由

于 2013-02-04T06:08:09.560 に答える