查询 | Queries
查询
查询基础
常规查询
若要提交查询
,请使用查询
职能:
$this->db->query('YOUR QUERY HERE'
query()函数在运行“读取”类型查询时返回数据库结果对象
,您可以使用该查询来显示结果。当“写入”类型的查询运行时,它只是返回TRUE或FALSE,取决于成功或失败。在检索数据时,您通常会将查询分配给您自己的变量,如下所示:
$query = $this->db->query('YOUR QUERY HERE'
简化查询
该simple_query方法是$这- > DB->查询()方法的简化版本。它不会返回数据库结果集,也不会设置查询计时器或编译绑定数据,也不会存储查询以进行调试。它只是让你提交一个查询。大多数用户很少使用此功能。
它返回数据库驱动程序的“执行”函数返回的任何内容。对于写入类型查询(例如INSERT,DELETE或UPDATE语句(这是真正应该使用的语句)以及成功的资源/对象)的成功或失败,对于具有可捕获结果的查询,这通常为TRUE / FALSE。
if ($this->db->simple_query('YOUR QUERY'))
{
echo "Success!";
}
else
{
echo "Query failed!";
}
注
PostgreSQL的pg_exec()
函数(例如)总是会在成功时返回资源,即使是写入类型查询也是如此。所以记住,如果你正在寻找一个布尔值。
手动使用数据库前缀
如果您已经配置了数据库前缀,并希望将其添加到表名中以供在本机SQL查询中使用,则可以使用以下方法:
$this->db->dbprefix('tablename' // outputs prefix_tablename
如果出于任何原因,您希望在不需要创建新连接的情况下以编程方式更改前缀,则可以使用以下方法:
$this->db->set_dbprefix('newprefix'
$this->db->dbprefix('tablename' // outputs newprefix_tablename
保护标识符
在许多数据库中,建议保护表和字段名称 - 例如在MySQL中使用反引号。查询生成器查询会自动受到保护
,但是如果您需要手动保护可以使用的标识符:
$this->db->protect_identifiers('table_name'
重要
虽然查询生成器将尽最大努力正确引用您提供的任何字段和表名称,但请注意,它不适用于任意用户输入。不要为其提供未经处理的用户数据。
假设你在你的数据库配置文件中指定了一个前缀,这个函数也会为你的表添加一个表前缀。要通过第二个参数启用前缀设置TRUE(布尔值):
$this->db->protect_identifiers('table_name', TRUE
转义查询
在将数据提交到数据库之前,将其转义是一种非常好的安全实践。CodeIgniter有三种方法可以帮助您这样做:
- $ this-> db-> escape()该函数确定数据类型,以便它只能转义字符串数据。它还会自动为数据添加单引号,因此您不必:$ sql =“INSERT INTO table(title)VALUES(”。$ this-> db-> escape($ title)。“)”;
- $ this-> db-> escape_str()无论类型如何,该函数都会将传递给它的数据转义出来。大多数时候你会使用上述功能而不是这个功能。使用这样的功能:
$ sql =“INSERT INTO table(title)VALUES('”。$ this-> db-> escape_str($ title)。“')”;
- $ this-> db-> escape_like_str()当在LIKE条件下使用字符串时,应使用此方法,以便字符串中的LIKE通配符('%','_')也能正确转义。
$search = '20% raise';
$sql = "SELECT id FROM table WHERE column LIKE '%" .
$this->db->escape_like_str($search)."%' ESCAPE '!'";
重要
该escape_like_str()
方法使用'!' (感叹号)为LIKE
条件转义特殊字符。因为此方法会转义部分字符串,而您将自行换行,所以它不能自动ESCAPE '!'
为您添加条件,因此您必须手动执行此操作。
查询绑定
绑定使您能够简化查询语法,方法是让系统为您将查询放在一起。考虑以下示例:
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick')
查询中的问号将自动替换为查询函数第二个参数中数组中的值。
绑定也适用于数组,数组将转换为IN集:
$sql = "SELECT * FROM some_table WHERE id IN ? AND status = ? AND author = ?";
$this->db->query($sql, array(array(3, 6), 'live', 'Rick')
产生的查询将是:
SELECT * FROM some_table WHERE id IN (3,6) AND status = 'live' AND author = 'Rick'
使用绑定的次要好处是自动转义值,从而产生更安全的查询。您不必记住手动转义数据;引擎会自动为您执行此操作。
处理错误
$这 - > DB->误差();
如果您需要获取发生的最后一个错误,那么error()方法将返回一个包含其代码和消息的数组。这里有个简单的例子:
if ( ! $this->db->simple_query('SELECT `example_field` FROM `example_table`'))
{
$error = $this->db->error( // Has keys 'code' and 'message'
}