directory search
Array Array Helper Benchmarking Benchmarking Class Caching Caching Driver Calendaring Calendaring Class CAPTCHA CAPTCHA Helper Config Config Class Cookie Cookie Helper Database Connecting to your Database Custom Function Calls Database Caching Class Database Configuration Database Forge Class Database Metadata Database Quick Start: Example Code Database Reference Database Utility Class DB Driver Reference Generating Query Results Queries Query Builder Class Query Helper Methods Transactions Date Date Helper Directory Directory Helper Download Download Helper Email Email Class Email Helper Encrypt Encrypt Class Encryption Encryption Library File File Helper File Uploading File Uploading Class Form Form Helper Form Validation Form Validation FTP FTP Class Functions compatibility_functions common_functions HTML HTML Helper HTML Table HTML Table Class Image Manipulation Image Manipulation Class Inflector Inflector Helper Input Input Class Javascript Javascript Class Language Language Class Language Helper Loader Loader Class Migrations Migrations Class Number Number Helper Output Output Class Pagination Pagination Class Path Path Helper Security Security Class Security Helper Session Session Library Shopping Cart Shopping Cart Class Smiley Smiley Helper String String Helper Template Parser Template Parser Class Text Text Helper Trackback Trackback Class Typography Typography Class Typography Helper Unit Testing Unit Testing Class URI URL User Agent XML XML-RPC and XML-RPC Server Zip Encoding Zip Encoding Class XML-RPC and XML-RPC Server Classes XML Helper User Agent Class URL Helper URI Class
characters

查询基础

常规查询

若要提交查询,请使用查询职能:

$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)。“)”;

  1. $ 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'}
Previous article: Next article: