例如:
桌子 :user
列:(user_id
类型为 int)
SELECT * FROM user WHERE user_id = '10xyz'
给出相同的结果
SELECT * FROM user WHERE user_id = '10'
输入值不是整数,但在这种情况下不会出错。
您获得相同结果的原因是因为MySQL
自动从字符串中删除尾随字符并将其隐式转换为整数。
如果您不想更改所有代码,但您的数据库查询都经过一个或几个子程序,您可以在使用语句句柄(例如if ( $sth->{mysql_warning_count} ) ...
)后更改它们以检查警告。
或者,您可以创建一个 DBI 子类,它会自动为您执行此操作,从而将警告升级为错误。如果你这样做了,许多其他人都会使用这种东西。在更新或将“10xyz”之类的内容插入整数字段时,有一些配置设置会给出错误而不是警告,但没有比这更广泛的内容,亲爱的 Oracle 认为它不是错误。也许 MariaDB 做得(或可以做得)更好?
user_id 的数据类型在数据库中是 INT
这就是为什么它给出相同的输出而不是错误