mysql自动将字符串转换为整数

时间:2012-06-11 15:50:18

标签: php mysql

我刚刚注意到,如果我像这样做一个MySQL请求:

SELECT 1 FROM myTable WHERE id = 'asdf'

然后将字符串'asdf'转换为0。 这意味着我有一个标识为0的记录,这将匹配。 id字段的格式为int(8).

最佳方式是:

  • 我需要检查(例如PHP)我的值只是数值?
  • 有一种MySQL方法可以做到吗?
  • 我必须删除ID为0的记录吗? (坏)

3 个答案:

答案 0 :(得分:4)

只需编写您的查询,以便他们不会使用数字字段,就好像它们是文本字段一样。

如果id是数字字段,那么您的where子句永远不会有用。是的,如果MySQL主动抱怨它会很好 - 但从根本上说,你不应该编写运行错误查询的代码。

该查询是如何进入您的系统的? 'asdf'部分是直接用户输入吗?你可以使用参数化的SQL吗?

如果您真的打算查询数字字段,则应确保输入首先是数字。将文本转换为调用代码中的整数,数据库中

答案 1 :(得分:2)

您必须首先通过PHP清理输入。

$id = 'asdf';
if(is_numeric($id)){
    $query("SELECT 1 FROM myTable WHERE id = $id");
}else{
    die("ID is not numeric");
}

或者你可以这样做:

    SELECT 1 FROM myTable WHERE id = 'asdf' AND 'asdf' REGEXP '^-?[0-9]+$'

这会导致正则表达式为= false,导致没有行返回。

答案 2 :(得分:1)

由于pdo预处理语句与正确类型的绑定不会引发任何错误(mysql strict mode is enabled除外),您唯一的选择是确保并控制php中变量的类型以“纠正”这些变量的允许性语言。

[感谢评论员]

相关问题