繁体   English   中英

比较活动记录代码初始化器中的值时,在where子句中使用斜杠

[英]Using slashes in the where clause while comparing values in active record codeigniter

我有以下查询

$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功能的主要好处是它允许您创建独立于数据库的应用程序,因为查询语法是由每个数据库适配器生成的。 它还允许更安全的查询,因为这些值会由系统自动转义。

活动记录中有一个方法称为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')). "'";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM