在线文档教程
Codeigniter 3

查询 | 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' }