繁体   English   中英

在Codeigniter中转义查询的正确方法

[英]Proper way to escape query in Codeigniter

$sql = ("update Inventory SET  ? = ?+1 WHERE ID= ?");

$query = $this->db->query($sql, array($field,$field,$id))->affected_rows();

错误:

您的SQL语法有误; 检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的“ Upvotes'='Upvotes'+ 1 WHERE ID = 386464'附近使用

基本上,它在Upvotes字段周围添加引号,导致它成为格式错误的查询,什么是删除单引号或完全重写查询的最实用方法?

如果可能,请尝试使用CI的查询生成器来降低语法错误的可能性。 根据Codeigniter文档

$data = array(
    'title' => $title,
    'name' => $name,
    'date' => $date
);

$this->db->where('id', $id);
$this->db->update('Inventory', $data);

就您而言,您可能正在寻找这样的东西:

$data = array(
    'Upvotes' => $upvotes + 1
);

$this->db->where('CARD_ID', '386464');
$this->db->update('Inventory', $data);

现在,如果要运行无法使用CI的查询生成器类运行的自定义代码,请执行以下操作:

$custom_sql = "update Inventory SET Upvotes = Upvotes + 1 WHERE CARD_ID = 86464";
$query = $this->db->query($custom_sql);

这里的答案并不完全正确,因为他们希望您已经有了支持人数。 我认为这是您要寻找的:

$this->db->where('ID', $ID);
$this->db->set('Upvotes', 'Upvotes+1', FALSE);
$this->db->update('Inventory');

使用下面的行来确认输出,它应该为您提供:

echo $this->db->last_query();

更新Inventory SET Upvotes = Upvotes + 1 WHERE ID = 386464

false的第三个参数告诉CI不要用反引号保护查询。

暂无
暂无

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

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