我有以下查询
$query="DELETE FROM salesinvoiceitems WHERE invoiceNumber=".$this->put('invoiceNumber');
此处$this->put('invoiceNumber');
的值始终为“M \ 34 \ SD”。由于值的斜杠,它不能按预期工作。
我研究并发现mysql_escape_string可以用于此目的,但现在已根据手册弃用了。那么我最好的选择是什么?
答案 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')). "'";