在Codeigniter中转义SQL查询

Nyx*_*nyx 11 php mysql activerecord codeigniter

我使用CodeIgniter将一些数据插入MySQL表.因为我正在使用INSERT IGNORE INTO并且不想编辑活动记录类来启用此功能,所以我手动生成SQL查询.

$this->db->query("INSERT IGNORE INTO my_table(lat, lng, date, type)
                        VALUES ('" . $data['lat'] . "', '" . $data['lng'] . "', '" . $data['date'] . "', '" . $data['type'] . "')");
Run Code Online (Sandbox Code Playgroud)

问题:当字符串$data['type']包含单引号时,查询失败.如何使这些需要转义的字符自动转义,就像使用Active记录一样?

Yan*_*erk 24

另一种方法是使用Query Binding自动转义所有值:

$sql = "INSERT IGNORE INTO my_table(lat, lng, date, type) VALUES (?,?,?,?);"; 
$this->db->query($sql, array($data['lat'], $data['lng'], $data['date'], $data['type']));
Run Code Online (Sandbox Code Playgroud)

  • 你可以使这更简单:`$ this-> db-> query($ sql,$ data);`这对我有用!(我猜你不应该在数据数组中有任何其他键才能工作) (2认同)

Moy*_*ari 8

使用$ this-> db-> escape(); 它会自动转义字符串

此函数确定数据类型,以便它只能转义字符串数据.它还会自动在数据周围添加单引号,因此您不必:

$this->db->query("INSERT IGNORE INTO my_table(lat, lng, date, type)
VALUES ('" . $this->db->escape($data['lat']) . "', '" . $this->db->escape($data['lng']) . "', '" . $this->db->escape($data['date']$this->db->escape . "', '" . $this->db->escape($data['type']) . "')");
Run Code Online (Sandbox Code Playgroud)

这是参考点击这里

  • 在页面的最后,有关参数绑定的部分是***更好的选项;) (4认同)