国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

CodeIgniter學(xué)習(xí)筆記 Item4--CI中的數(shù)據(jù)庫(kù)操作

黃舟
發(fā)布: 2016-12-29 10:16:05
原創(chuàng)
1654人瀏覽過

ci數(shù)據(jù)庫(kù)配置文件是/application/config/database.php

[code]// 可以創(chuàng)建多個(gè)數(shù)據(jù)庫(kù)連接配置,通過$active_group選擇使用哪個(gè)數(shù)據(jù)庫(kù)連接
$active_group = 'default';

// 配置是否加載查詢構(gòu)建類,默認(rèn)為TRUE,通常保持默認(rèn)值
$query_builder = TRUE;

// 數(shù)據(jù)庫(kù)連接配置,可以有多個(gè)連接配置,索引需要區(qū)分開
$db['default'] = array(
    'dsn'    => '',
    'hostname' => 'localhost',        // ip
    'username' => 'root',            // 用戶名
    'password' => '123456',            // 密碼
    'database' => 'workplatform',    // 數(shù)據(jù)庫(kù)名稱
    'dbdriver' => 'mysqli',            // 使用什么庫(kù)訪問數(shù)據(jù)庫(kù)
                                    // 目前可以支持cubrid,ibase,mssql,mysql,mysqli,oci8
                                    // odbc, pdo, postgre, sqlite, sqlite3, sqlsrv
    'dbprefix' => '',                // 表前綴
    'pconnect' => FALSE,
    'db_debug' => TRUE,
    'cache_on' => FALSE,            // 是否啟用查詢緩存
    'cachedir' => '',                // 查詢緩存目錄
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',                // 交換表前綴,表前綴的替換寫法
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
登錄后復(fù)制

在使用數(shù)據(jù)庫(kù)前,需要使用裝載器來加載數(shù)據(jù)庫(kù)對(duì)象

[code]$this->load->database();
登錄后復(fù)制
登錄后復(fù)制

裝載完成后,$this->db就是這個(gè)數(shù)據(jù)庫(kù)對(duì)象,以后的數(shù)據(jù)操作都是調(diào)用這個(gè)對(duì)象的方法進(jìn)行

首先定義SQL語(yǔ)句:

[code]$sql = 'SELECT * FROM user';
登錄后復(fù)制

再調(diào)用db對(duì)象的query方法進(jìn)行查詢

[code]$result = $this->db->query($sql);
登錄后復(fù)制

返回值$result是一個(gè)對(duì)象,通過調(diào)用它的方法可以返回不同形式的結(jié)果,例如:調(diào)用它的result()方法獲取查詢結(jié)果

[code]$users = $result->result();
登錄后復(fù)制

此時(shí),

$users
登錄后復(fù)制

是一個(gè)對(duì)象數(shù)組,或者調(diào)用它的result_array()方法獲取關(guān)聯(lián)數(shù)組查詢結(jié)果

[code]$users = $result->result_array();
登錄后復(fù)制
調(diào)用row()方法以對(duì)象形式返回第一條記錄或第幾條記錄
[code]$users = $result->row();
登錄后復(fù)制
但是,如果SQL是增、刪、修改語(yǔ)句,query()方法將返回TRUE或FALSE,此時(shí)通過db的方法可以獲取執(zhí)行的結(jié)果,比如:
[code]$this->db->affected_rows();    // 獲取影響的行數(shù)
$this->db->insert_id();        // 獲取插入數(shù)據(jù)的id
登錄后復(fù)制

在執(zhí)行數(shù)據(jù)庫(kù)操作前,由于不知道在查詢前

$this->db
登錄后復(fù)制

是否已經(jīng)生成,因此都需要調(diào)用

$this->load->database()
登錄后復(fù)制

方法,通過修改/application/config/autoload.php文件,可以讓CI自動(dòng)加載數(shù)據(jù)庫(kù)

[code]$autoload['libraries'] = array('database');
登錄后復(fù)制
登錄后復(fù)制

如果SQL語(yǔ)句中的變量過多,會(huì)影響語(yǔ)句的編寫,這時(shí)可以采用占位符來解決

[code]$data[0] = 'dj';
$data[1] = '123456';
$sql = "INSERT INTO user (account, password, usertype, username) VALUES ('1231', ?, '1', ?)";
$result = $this->db->query($sql, $data);
登錄后復(fù)制
傳入的數(shù)組中的元素會(huì)依次取代SQL中的?,生成實(shí)際的SQL語(yǔ)句

備注:在測(cè)試這段代碼時(shí),由于錯(cuò)誤的在字段名兩側(cè)加上了’,造成一直報(bào)錯(cuò),引以為戒.

連接你的數(shù)據(jù)庫(kù)

有兩種方法連接數(shù)據(jù)庫(kù):

自動(dòng)連接?

“自動(dòng)連接” 特性將在每一個(gè)頁(yè)面加載時(shí)自動(dòng)實(shí)例化數(shù)據(jù)庫(kù)類。要啟用“自動(dòng)連接”, 可在 application/config/autoload.php 中的 library 數(shù)組里添加 database:

[code]$autoload['libraries'] = array('database');
登錄后復(fù)制
登錄后復(fù)制
手動(dòng)連接?

如果你只有一部分頁(yè)面需要數(shù)據(jù)庫(kù)連接,你可以在那些有需要的函數(shù)里手工添加 如下代碼來連接數(shù)據(jù)庫(kù),或者寫在類的構(gòu)造函數(shù)里,讓整個(gè)類都可以訪問:

[code]$this->load->database();
登錄后復(fù)制
登錄后復(fù)制

如果 database() 函數(shù)沒有指定第一個(gè)參數(shù),它將使用數(shù)據(jù)庫(kù)配置文件中 指定的組連接數(shù)據(jù)庫(kù)。對(duì)大多數(shù)人而言,這是首選方案。

可用的參數(shù)?

數(shù)據(jù)庫(kù)連接值,用數(shù)組或DSN字符串傳遞;

[code]TRUE/FALSE (boolean) - 是否返回連接ID(參考下文的“連接多數(shù)據(jù)庫(kù)”);
TRUE/FALSE (boolean) - 是否啟用查詢構(gòu)造器類,默認(rèn)為 TRUE 。
登錄后復(fù)制
手動(dòng)連接到數(shù)據(jù)庫(kù)?

這個(gè)函數(shù)的第一個(gè)參數(shù)是可選的,被用來從你的配置文件中 指定一個(gè)特定的數(shù)據(jù)庫(kù)組,甚至可以使用沒有在配置文件中定義的 數(shù)據(jù)庫(kù)連接值。下面是例子:

從你的配置文件中選擇一個(gè)特定分組:
[code]$this->load->database('group_name');
登錄后復(fù)制
其中 group_name 是你的配置文件中連接組的名字。

連接一個(gè)完全手動(dòng)指定的數(shù)據(jù)庫(kù),可以傳一個(gè)數(shù)組參數(shù):
[code]$config['hostname'] = 'localhost';
$config['username'] = 'myusername';
$config['password'] = 'mypassword';
$config['database'] = 'mydatabase';
$config['dbdriver'] = 'mysqli';
$config['dbprefix'] = '';
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = '';
$config['char_set'] = 'utf8';
$config['dbcollat'] = 'utf8_general_ci';
$this->load->database($config);
登錄后復(fù)制

注解

對(duì)于 PDO 驅(qū)動(dòng),你應(yīng)該使用 $config[‘dsn’] 取代 ‘hostname’ 和 ‘database’ 參數(shù):

[code]$config['dsn'] = 'mysql:host=localhost;dbname=mydatabase';
登錄后復(fù)制

或者你可以使用數(shù)據(jù)源名稱(DSN,Data Source Name)作為參數(shù),DSN 的格式必須類似于下面這樣:

[code]$dsn = 'dbdriver://username:password@hostname/database';
$this->load->database($dsn);
登錄后復(fù)制

當(dāng)用 DSN 字符串連接時(shí),要覆蓋默認(rèn)配置,可以像添加查詢字符串一樣添加配置變量。

[code]$dsn = 'dbdriver://username:password@hostname/database?char_set=utf8&dbcollat=utf8_general_ci&cache_on=true&cachedir=/path/to/cache';
$this->load->database($dsn);
登錄后復(fù)制

注意:將 “group_one” 和 “group_two” 修改為你要連接的組名稱 (或者像上面介紹的那樣傳入連接值數(shù)組)

第二個(gè)參數(shù) TRUE 表示函數(shù)將返回?cái)?shù)據(jù)庫(kù)對(duì)象。

注解

當(dāng)你使用這種方式連接數(shù)據(jù)庫(kù)時(shí),你將通過你的對(duì)象名來執(zhí)行數(shù)據(jù)庫(kù)命令, 而不再是通過這份指南中通篇介紹的,就像下面這樣的語(yǔ)法了:

[code]$this->db->query();
$this->db->result();
etc...
登錄后復(fù)制

取而代之的,你將這樣執(zhí)行數(shù)據(jù)庫(kù)命令:

[code]$DB1->query();
$DB1->result();
etc...
登錄后復(fù)制

注解

如果你只是需要切換到同一個(gè)連接的另一個(gè)不同的數(shù)據(jù)庫(kù),你沒必要?jiǎng)?chuàng)建 獨(dú)立的數(shù)據(jù)庫(kù)配置,你可以像下面這樣切換到另一個(gè)數(shù)據(jù)庫(kù):

[code]$this->db->db_select($database2_name);
登錄后復(fù)制
重新連接 / 保持連接有效?

當(dāng)你在處理一些重量級(jí)的 PHP 操作時(shí)(例如處理圖片),如果超過了數(shù)據(jù)庫(kù)的超時(shí)值, 你應(yīng)該考慮在執(zhí)行后續(xù)查詢之前先調(diào)用 reconnect() 方法向數(shù)據(jù)庫(kù)發(fā)送 ping 命令, 這樣可以優(yōu)雅的保持連接有效或者重新建立起連接。

[code]$this->db->reconnect();
登錄后復(fù)制

手動(dòng)關(guān)閉連接?

雖然 CodeIgniter 可以智能的管理并自動(dòng)關(guān)閉數(shù)據(jù)庫(kù)連接,你仍可以用下面的方法顯式的關(guān)閉連接:

[code]$this->db->close();
登錄后復(fù)制

查詢

[code]$this->db->query();
登錄后復(fù)制

要提交一個(gè)查詢,用以下函數(shù):

[code]$this->db->query('YOUR QUERY HERE');
登錄后復(fù)制

query() 函數(shù)以object(對(duì)象)的形式返回一個(gè)數(shù)據(jù)庫(kù)結(jié)果集. 當(dāng)使用 “read” 模式來運(yùn)行查詢時(shí), 你可以使用“顯示你的結(jié)果集”來顯示查詢結(jié)果; 當(dāng)使用 “write” 模式來運(yùn)行查詢時(shí), 將會(huì)僅根據(jù)執(zhí)行的成功或失敗來返回 TRUE 或 FALSE. 當(dāng)你需要將返回的結(jié)果賦值給一個(gè)自定義變量的時(shí)候, 你可以這樣操作:

[code]$query = $this->db->query('YOUR QUERY HERE');

$this->db->simple_query();
登錄后復(fù)制


這是一個(gè)簡(jiǎn)化版本的 $this->db->query() 函數(shù). 它僅返回 True(bool) 和 False(bool) 以表示查詢成功與失敗. 它將不會(huì)返回查詢數(shù)據(jù)集,無法設(shè)置查詢計(jì)時(shí)器(設(shè)置環(huán)境變量),無法編譯綁定數(shù)據(jù),不能夠存儲(chǔ)查詢?cè)\斷信息。簡(jiǎn)單地說,他是一個(gè)用于提交查詢的函數(shù),對(duì)于大多數(shù)用戶而言并不會(huì)使用到它。

手工添加數(shù)據(jù)庫(kù)前綴?

如果你需要為一個(gè)數(shù)據(jù)庫(kù)手工添加前綴,你可以使用以下步驟。

[code]$this->db->dbprefix('tablename');
// outputs prefix_tablename
登錄后復(fù)制

保護(hù)標(biāo)識(shí)符?

在許多數(shù)據(jù)庫(kù)中,保護(hù)表(table)和字段(field)的名稱是明智的,例如在MySQL中使用反引號(hào)。Active Record的查詢都已被自動(dòng)保護(hù),然而,如果您需要手動(dòng)保護(hù)一個(gè)標(biāo)識(shí)符,您也可以這樣:

[code]$this->db->protect_identifiers('table_name');
登錄后復(fù)制

這個(gè)函數(shù)也會(huì)給你的表名添加一個(gè)前綴,它假定在你的數(shù)據(jù)庫(kù)配置文件中已指定了一個(gè)前綴??赏ㄟ^將第二個(gè)參數(shù)設(shè)置為TRUE (boolen) 啟用前綴:

[code]$this->db->protect_identifiers('table_name', TRUE);
登錄后復(fù)制
轉(zhuǎn)義查詢?

將數(shù)據(jù)轉(zhuǎn)義以后提交到你的數(shù)據(jù)庫(kù)是非常好的安全做法,CodeIgniter 提供了 3 個(gè)函數(shù)幫助你完成這個(gè)工作。

$this->db->escape()
登錄后復(fù)制

這個(gè)函數(shù)將會(huì)確定數(shù)據(jù)類型,以便僅對(duì)字符串類型數(shù)據(jù)進(jìn)行轉(zhuǎn)義。并且,它也會(huì)自動(dòng)把數(shù)據(jù)用單引號(hào)括起來,所以你不必手動(dòng)添加單引號(hào),用法如下:?

[code]$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
登錄后復(fù)制
$this->db->escape_str()
登錄后復(fù)制

此函數(shù)將忽略數(shù)據(jù)類型對(duì)傳入數(shù)據(jù)進(jìn)行轉(zhuǎn)義。更多時(shí)候你將使用上面的函數(shù)而不是這個(gè)。這個(gè)函數(shù)的使用方法是:?

[code]$sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";

$this->db->escape_like_str() This method should be used when strings are to be used in LIKE conditions so that LIKE wildcards ('%', '_') in the string are also properly escaped. 
$search = '20% raise';
$sql = "SELECT id FROM table WHERE column LIKE '%".$this->db->escape_like_str($search)."%'";
登錄后復(fù)制

封裝查詢?

封裝,通過讓系統(tǒng)為你組裝各個(gè)查詢語(yǔ)句,能夠簡(jiǎn)化你的查詢語(yǔ)法。參加下面的范例:

[code]$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; 

$this->db->query($sql, array(3, 'live', 'Rick'));
登錄后復(fù)制

查詢語(yǔ)句中的問號(hào)會(huì)自動(dòng)被查詢函數(shù)中位于第二個(gè)參數(shù)位置的數(shù)組中的值所替代。

?以上就是CodeIgniter學(xué)習(xí)筆記 Item4--CI中的數(shù)據(jù)庫(kù)操作的內(nèi)容,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP中文網(wǎng)(www.miracleart.cn)!

最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件

每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn
最新問題
開源免費(fèi)商場(chǎng)系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)