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

如果您不想更改所有代码,但您的数据库查询都经过一个或几个子程序,您可以在使用语句句柄(例如if ( $sth->{mysql_warning_count} ) ...)后更改它们以检查警告。

或者,您可以创建一个 DBI 子类,它会自动为您执行此操作,从而将警告升级为错误。如果你这样做了,许多其他人都会使用这种东西。在更新或将“10xyz”之类的内容插入整数字段时,有一些配置设置会给出错误而不是警告,但没有比这更广泛的内容,亲爱的 Oracle 认为它不是错误。也许 MariaDB 做得(或可以做得)更好?

于 2013-02-04T07:24:57.227 回答
1

user_id 的数据类型在数据库中是 INT

这就是为什么它给出相同的输出而不是错误

于 2013-02-04T06:08:09.560 回答