0

我有以下查询

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

这里$this->put('invoiceNumber');总是有像“M\34\SD”这样的值。由于值中的斜线,它不能按预期工作。

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

4

4 回答 4

1

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

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

取自 Codeigniter 文档:

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

于 2013-03-05T09:48:37.233 回答
0

在 activerecord 中有一个方法叫做escape,所以你应该:

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

这将防止 sql 注入,因为它逃脱了 var。

于 2013-03-05T09:47:18.667 回答
0

试试这个

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

于 2013-03-05T09:47:25.140 回答
0

尝试带斜杠

$query="DELETE FROM salesinvoiceitems WHERE invoiceNumber='".($this->put('invoiceNumber')). "'";
于 2013-03-05T09:48:03.083 回答