📜  codeigniter 中的原始查询 (1)

📅  最后修改于: 2023-12-03 14:59:58.081000             🧑  作者: Mango

CodeIgniter中的原始查询

在CodeIgniter中,原始查询是通过数据库驱动程序提供的一种允许您以纯SQL形式运行查询的方法。

使用原始查询

要使用原始查询,您可以调用 CodeIgniter数据库类中的query() 方法,传递SQL语句作为参数。该方法会返回一个查询结果对象。

$query = $this->db->query('SELECT * FROM my_table');

您还可以使用带占位符的查询:

$sql = "SELECT * FROM my_table WHERE id = ? AND status = ?";
$query = $this->db->query($sql, array(3, 'active'));

此查询将在运行时使用占位符替换,并将传递的数组作为占位符的值。

处理结果

原始查询返回的结果对象可以使用 CodeIgniter提供的查询结果类来轻松地处理和操作。

$query = $this->db->query('SELECT * FROM my_table');

foreach ($query->result() as $row)
{
   echo $row->title;
}

使用 result() 方法可以提取结果集中的行数组,并通过PHP对象属性访问每个行的数据。

还可以使用其他方法处理结果集,例如 row()、result_array()、row_array() 等。

防止SQL注入

使用原始查询时,始终要确保输入值,这些值可能来自用户输入或其他不受信任的源,已经过正确的转义和处理,以避免SQL注入攻击。

CodeIgniter提供了几种方法来帮助您处理输入值。最安全的方式始终是使用查询绑定,它允许您使用占位符将变量传递到查询中,并在运行查询时自动过滤它们。

$sql = "SELECT * FROM my_table WHERE id = ?";
$query = $this->db->query($sql, array($id));

在此示例中,$id的值将被自动过滤,以避免SQL注入攻击。

可以使用$this->db->protect_identifiers()方法来实现更加灵活的数据过滤。

$table = $this->db->protect_identifiers($table); // 对表名进行转义和处理,防止SQL注入
$sql = "SELECT * FROM $table WHERE id = ?";
$query = $this->db->query($sql, array($id));
总结

虽然使用原始查询可以轻松地在CodeIgniter应用程序中运行任意SQL语句,但始终要确保输入值是安全的,并通过查询绑定或其他方法来过滤和转义它们。