# 連接你的數據庫
有兩種方法連接數據庫:
## 自動連接
“自動連接” 特性將在每一個頁面加載時自動實例化數據庫類。要啟用“自動連接”, 可在?application/config/autoload.php?中的 library 數組里添加 database:
~~~
$autoload['libraries'] = array('database');
~~~
## 手動連接
如果你只有一部分頁面需要數據庫連接,你可以在那些有需要的函數里手工添加 如下代碼來連接數據庫,或者寫在類的構造函數里,讓整個類都可以訪問:
~~~
$this->load->database();
~~~
如果?database()?函數沒有指定第一個參數,它將使用數據庫配置文件中 指定的組連接數據庫。對大多數人而言,這是首選方案。
### 可用的參數
1. 數據庫連接值,用數組或DSN字符串傳遞;
2. TRUE/FALSE (boolean) - 是否返回連接ID(參考下文的“連接多數據庫”);
3. TRUE/FALSE (boolean) - 是否啟用查詢構造器類,默認為 TRUE 。
### 手動連接到數據庫
這個函數的第一個參數是**可選的**,被用來從你的配置文件中 指定一個特定的數據庫組,甚至可以使用沒有在配置文件中定義的 數據庫連接值。下面是例子:
從你的配置文件中選擇一個特定分組:
~~~
$this->load->database('group_name');
~~~
其中?group_name?是你的配置文件中連接組的名字。
連接一個完全手動指定的數據庫,可以傳一個數組參數:
~~~
$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);
~~~
這些值的詳細信息請參考 :doc:?數據庫配置 ?頁面。
注解
對于 PDO 驅動,你應該使用?$config['dsn']?取代 'hostname' 和 'database' 參數:
$config['dsn'] = 'mysql:host=localhost;dbname=mydatabase';
或者你可以使用數據源名稱(DSN,Data Source Name)作為參數,DSN 的格式必須類似于下面這樣:
~~~
$dsn = 'dbdriver://username:password@hostname/database';
$this->load->database($dsn);
~~~
當用 DSN 字符串連接時,要覆蓋默認配置,可以像添加查詢字符串一樣添加配置變量。
~~~
$dsn = 'dbdriver://username:password@hostname/database?char_set=utf8&dbcollat=utf8_general_ci&cache_on=true&cachedir=/path/to/cache';
$this->load->database($dsn);
~~~
## 連接到多個數據庫
如果你需要同時連接到多個不同的數據庫,可以這樣:
~~~
$DB1 = $this->load->database('group_one', TRUE);
$DB2 = $this->load->database('group_two', TRUE);
~~~
注意:將 "group_one" 和 "group_two" 修改為你要連接的組名稱 (或者像上面介紹的那樣傳入連接值數組)
第二個參數 TRUE 表示函數將返回數據庫對象。
> 注解
> 當你使用這種方式連接數據庫時,你將通過你的對象名來執行數據庫命令, 而不再是通過這份指南中通篇介紹的,就像下面這樣的語法了:
~~~
$this->db->query();
$this->db->result();
etc...
~~~
取而代之的,你將這樣執行數據庫命令:
~~~
$DB1->query();
$DB1->result();
etc...
~~~
> 注解
> 如果你只是需要切換到同一個連接的另一個不同的數據庫,你沒必要創建 獨立的數據庫配置,你可以像下面這樣切換到另一個數據庫:
~~~
$this->db->db_select($database2_name);
~~~
## 重新連接 / 保持連接有效
當你在處理一些重量級的 PHP 操作時(例如處理圖片),如果超過了數據庫的超時值, 你應該考慮在執行后續查詢之前先調用?reconnect()?方法向數據庫發送 ping 命令, 這樣可以優雅的保持連接有效或者重新建立起連接。
~~~
$this->db->reconnect();
~~~
## 手動關閉連接
雖然 CodeIgniter 可以智能的管理并自動關閉數據庫連接,你仍可以用下面的方法顯式的關閉連接:
~~~
$this->db->close();
~~~
- 歡迎使用 CodeIgniter
- 安裝說明
- 下載 CodeIgniter
- 安裝說明
- 從老版本升級
- 疑難解答
- CodeIgniter 概覽
- CodeIgniter 將從這里開始
- CodeIgniter 是什么?
- 支持特性
- 應用程序流程圖
- 模型-視圖-控制器
- 設計與架構目標
- 教程 - 內容提要
- 加載靜態內容
- 讀取新聞條目
- 創建新聞條目
- 結束語
- 常規主題
- CodeIgniter URL
- 控制器
- 保留名稱
- 視圖
- 模型
- 輔助函數
- 使用 CodeIgniter 類庫
- 創建類庫
- 使用 CodeIgniter 驅動器
- 創建驅動器
- 創建核心系統類
- 創建附屬類
- 鉤子 - 擴展框架核心
- 自動加載資源
- 公共函數
- 兼容性函數
- URI 路由
- 錯誤處理
- 網頁緩存
- 程序分析
- 以 CLI 方式運行
- 管理你的應用程序
- 處理多環境
- 在視圖文件中使用 PHP 替代語法
- 安全
- PHP 開發規范
- 類庫參考
- 基準測試類
- 緩存驅動器
- 日歷類
- 購物車類
- 配置類
- Email 類
- 加密類
- 加密類(新版)
- 文件上傳類
- 表單驗證類
- FTP 類
- 圖像處理類
- 輸入類
- Javascript 類
- 語言類
- 加載器類
- 遷移類
- 輸出類
- 分頁類
- 模板解析類
- 安全類
- Session 類
- HTML 表格類
- 引用通告類
- 排版類
- 單元測試類
- URI 類
- 用戶代理類
- XML-RPC 與 XML-RPC 服務器類
- Zip 編碼類
- 數據庫參考
- 數據庫快速入門: 示例代碼
- 數據庫配置
- 連接你的數據庫
- 查詢
- 生成查詢結果
- 查詢輔助函數
- 查詢構造器類
- 事務
- 數據庫元數據
- 自定義函數調用
- 數據庫緩存類
- 數據庫工廠類
- 數據庫工具類
- 數據庫驅動器參考
- 輔助函數參考
- 數組輔助函數
- 驗證碼輔助函數
- Cookie 輔助函數
- 日期輔助函數
- 目錄輔助函數
- 下載輔助函數
- 郵件輔助函數
- 文件輔助函數
- 表單輔助函數
- HTML 輔助函數
- 語言輔助函數
- Inflector 輔助函數
- 數字輔助函數
- 路徑輔助函數
- 安全輔助函數
- 表情輔助函數
- 字符串輔助函數
- 文本輔助函數
- 排版輔助函數
- URL 輔助函數
- XML 輔助函數
- 向 CodeIgniter 貢獻你的力量