在比较活动记录codeigniter中的值时,在where子句中使用斜杠

时间:2013-03-05 09:44:48

标签: php codeigniter activerecord

我有以下查询

$query="DELETE FROM salesinvoiceitems WHERE invoiceNumber=".$this->put('invoiceNumber');

此处$this->put('invoiceNumber');的值始终为“M \ 34 \ SD”。由于值的斜杠,它不能按预期工作。

我研究并发现mysql_escape_string可以用于此目的,但现在已根据手册弃用了。那么我最好的选择是什么?

4 个答案:

答案 0 :(得分:1)

为什么不使用Codeingiter Active Record呢?一个例子:

$this->db->where('invoiceNumber', $this->put('invoiceNumber'));
$this->db->delete('salesinvoiceitems');

取自Codeigniter文档:

  

超越简单性,使用Active Record功能的主要好处   是它允许您创建数据库独立的应用程序,   因为查询语法是由每个数据库适配器生成的。它也是   允许更安全的查询,因为值会自动转义   由系统。

答案 1 :(得分:0)

在activerecord中有一个名为escape的方法,所以你应该:

$invoice = $this->db->escape($yourVar);
$query = "DELETE FROM salesinvoiceitems WHERE invoiceNumber=$invoice";

这将防止sql注入,因为它会转义var。

答案 2 :(得分:0)

试试这个

$query="DELETE FROM salesinvoiceitems WHERE invoiceNumber=".addslashes($this->put('invoiceNumber'));

答案 3 :(得分:0)

尝试条形斜线

$query="DELETE FROM salesinvoiceitems WHERE invoiceNumber='".($this->put('invoiceNumber')). "'";