mysql选择返回不精确匹配的位置

时间:2012-12-14 16:41:37

标签: php mysql codeigniter

我在使用简单SELECT子句的表上执行WHERE时会看到奇怪的行为,返回的记录不完全匹配。

我的表有一列id int(11)作为主键。例如,要查找id为5350的记录,以下两个查询都会返回ID为5350的记录。

SELECT * FROM mytable WHERE id="5350"
SELECT * FROM mytable WHERE id="5350abcd"

有人认为我的目的是在5350左右移除“”,但我得到的结果相同。在codeigniter,我试过这个:

$where = "id=$my_id";
$this->db->where($where);

为什么会发生这种情况,我如何解决这个问题,以便非精确的ID找不到记录?

5 个答案:

答案 0 :(得分:1)

在第二个查询中,ID值不是整数。在运行查询之前,您需要确保该值是一个整数,否则它会将值转换为此值。

答案 1 :(得分:1)

它正在将其解析为数字,因为该字段为Int。如果你使用say just =“abcd”它会解析为零。

哦,你不需要int值的引号

答案 2 :(得分:1)

我的猜测是它解析了这些字母,因为它的类型是int。它忽略了所有的alpha。因为它具有添加数字的相同ID,所以它会解析为字母前面的数字。

5350 <-- INT
5350abcd <--- 'abcd' gets parsed out because it's not of INT type. 
You end up with 5350 without the abcd at the end. 

你的字段是数据类型varchar,它会解析所有字段。

答案 3 :(得分:0)

试试这个:

$where = array('id' => $my_id);
$this->db->where($where);

答案 4 :(得分:0)

$where = "id=".((string)(int)$my_id === $my_id ? $my_id : 0);
$this->db->where($where);

但是这个解决方案仍然很难看,因为你什么都不做查询。在进行查询之前,您应该检查$my_id是否正确。