我有以下查询
$query="DELETE FROM salesinvoiceitems WHERE invoiceNumber=".$this->put('invoiceNumber');
这里$this->put('invoiceNumber');
总是有像“M\34\SD”这样的值。由于值中的斜线,它不能按预期工作。
我研究并发现 mysql_escape_string 可用于此目的,但根据手册现在已弃用。那么我在这里最好的选择是什么?
我有以下查询
$query="DELETE FROM salesinvoiceitems WHERE invoiceNumber=".$this->put('invoiceNumber');
这里$this->put('invoiceNumber');
总是有像“M\34\SD”这样的值。由于值中的斜线,它不能按预期工作。
我研究并发现 mysql_escape_string 可用于此目的,但根据手册现在已弃用。那么我在这里最好的选择是什么?
为什么不改用 Codeingiter Active Record?一个例子:
$this->db->where('invoiceNumber', $this->put('invoiceNumber'));
$this->db->delete('salesinvoiceitems');
取自 Codeigniter 文档:
除了简单之外,使用 Active Record 功能的一个主要好处是它允许您创建独立于数据库的应用程序,因为查询语法是由每个数据库适配器生成的。它还允许更安全的查询,因为系统会自动转义这些值。
在 activerecord 中有一个方法叫做escape
,所以你应该:
$invoice = $this->db->escape($yourVar);
$query = "DELETE FROM salesinvoiceitems WHERE invoiceNumber=$invoice";
这将防止 sql 注入,因为它逃脱了 var。
试试这个
$query="DELETE FROM salesinvoiceitems WHERE invoiceNumber=".addslashes($this->put('invoiceNumber'));
尝试带斜杠
$query="DELETE FROM salesinvoiceitems WHERE invoiceNumber='".($this->put('invoiceNumber')). "'";