SQL,其中CodeIgniter的Active Records中的值0和sha1(value,true)的值组合返回所有行

时间:2011-07-20 08:42:38

标签: php sql codeigniter activerecord null

所以这是我在前面提到的一个问题中对真正问题的结论: SQL Select Query with CodeIgniter's active records and 'where sha1' returns first row entry

我也在CodeIgniter论坛中发帖双重: http://codeigniter.com/forums/viewthread/194502/(最新进展......)

您可以从两者中获得多个代码段。

简而言之,我遇到的问题如下,我不确定谁是真正的罪魁祸首:

我正在使用如下所示的数组来定义活动记录函数的select查询中的“where”。如果在下面列出的特定组合中使用,查询将为我提供表中的所有行。

粘贴---

实际上,当sha1返回原始输出数据和电子邮件时,实际上看起来这种错误组合才会发生。 1例如:

$where = array(
          'email'     => 0,
          'password'  => sha1(false, true), # sha1($this->input>post('password'), true);
         ); 

如果sha1(false,true)更改为sha1(无论如何),则没有错误。 ('无论'包括字符串,布尔等)。

如果数组未更改且'email'=> 0更改为'email'=>在SQL QueryA中发生'0',然后它正常工作。如果我从QueryA中的值中删除's,就像在Active Records中那样,我再次获取所有行...

另外,当'email'为>时,我没有得到任何行(这是正确的) 0.即'email'=> 1(2,3等),甚至当'email'=>空值。

'email'= 0和sha1('any value',true)的组合导致返回Active Records表中的每一行,因为没有为值0添加引号。但是,在''周围添加引号密码'='值'。如果原始哈希周围没有引号,那么SQL会返回一个错误并阻止脚本运行..(这比返回行更好......)

这可能是一个SQL错误,因为它只发生在0的值...但是引用where值是用户错误吗?如果是这样,那么Active Records是否应该为我自动引用该值,如果它是一个整数?它似乎是为字符串值而不是整数(false = 0,true = 1)......

1 个答案:

答案 0 :(得分:0)

如果您想在查询中获得相同的结果,请将两者相等。在QUERY1中,您可以按如下方式定义术语:

WHERE `email` = \''.$data['email'].'\' 
AND `password` = \''.$data['password'].'\' 
2中的

# data for sql query
$where = array(
    'email'     => $this->input->post('email'),
    'password'  => sha1($this->input->post('password'), true);
);

对于QUERY1和QUERY2相等,QUERY2将是:

# data for sql query
$where = array(
    'email'     => "'".$this->input->post('email')."'",
    'password'  => sha1($this->input->post('password'), true);
);

Codeigniter不能自己确定0不应该是数字。你自己做QUERY1。