前言
在實際開發中,關於數據庫操作類,很少是自己去寫,大多是通過一些框架去實現,突然自己去寫,還是需要借閱手冊之類,於是我覺得有必要去總結一下,php連接mysql的方法,php連接mysql,可以通過mysql擴展、mysqli擴展,pdo擴展,因為高版本的php將移除mysql_系列方法,故在此只總結另外兩種連接方式。首先我們得確保php的這兩個擴展是否已經打開,查看php.ini配置文件如下:

提示,如有有的人說,我打開了擴展庫(即去掉了,前面的';'),仍然一直提示mysqli_或pdo系列方法找不到,這很可能是因為你沒有指定擴展庫所在目錄。找到extension_dir 參數,指定擴展所在目錄即可
extension_dir = "D:/wamp/bin/php/php5.5.12/ext/"
配置文件
首先我們將連接數據庫需要的配置文件,單獨出來,這樣就不需要每次都去寫,需要的時候,直接include或者require包含進來就可以了。如果關於include與require不清楚的,可以查考http://blog.csdn.net/hsd2012/article/details/51089785
文件名conf.php
- return array(
- 'host'=>'127.0.0.1',
- 'user'=>'root',
- 'password'=>'',//因為測試,我就不設置密碼,實際開發中,必須建立新的用戶並設置密碼
- 'dbName'=>'xxpt',
- 'charSet'=>'utf8',
- 'port'=>'3306'
通過mysqli擴展連接
mysqli有兩種方式去連接mysql,且支持預處理,一種是面向對象,一種是面向過程。
1.面向過程連接mysql
- $dbConf=include 'conf.php';
- function openDb($dbConf){
- $conn=mysqli_connect($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']) or die('打開失敗');
- //當然如上面不填寫數據庫也可通過mysqli_select($conn,$dbConf['dbName'])來選擇數據庫
- mysqli_set_charset($conn,$dbConf['charSet']);//設置編碼
- return $conn;
- }
- function closeDb($conn){
- mysqli_close($conn);
- }
- //1.打開連接
- $conn=openDb($dbConf);
- //2query方法執行增、查、刪、改
- $sql='SELECT t.`id1` from `t1` as t';
- /*************數據查詢***************************/
- $rs=$conn->query($sql);
- //從結果集中讀取數據
- //fetch_assoc:返回鍵值對形式,鍵位字段名、fetch_row:返回鍵值對形式,鍵值為數值、fetch_array:返回1和2兩種形式的組合
- $data=array();//保存數據
- while($tmp=mysqli_fetch_assoc($rs)){//每次從結果集中取出一行數據
- $data[]=$tmp;
- }
- //對數據進行相應的操作
- print_r($data);//輸出數據
- /*************數據插入***************************/
- $sql='INSERT INTO `t1`(`id1`,`id2`) VALUES(3,4);';
- $rs=$conn->query($sql);
- //3.關閉連接
- closeDb($conn);
2.面向對象方式連接mysql
- $dbConf=include 'conf.php';
- //打開
- $conn=new mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']);
- if(!$conn){
- die('數據庫打開失敗');
- }
- //執行增刪改查
- /*************數據查詢***************************/
- $sql='SELECT t.`id1` from `t1` as t';
- $rs=$conn->query($sql);//獲取結果集
- //通過fetch_assoc、fetch_array、fetch_row從結果集中獲取數據
- while ($tmp=$rs->fetch_assoc()) {
- print_r($tmp);
- }
- /*************數據刪除***************************/
- $sql='DELETE FROM `t1` WHERE `id1`=3';
- $rs=$conn->query($sql);//獲取結果集
- print_r($rs);$conn->close();
3.mysqli預處理
主要講解mysli對象編程的預處理,至於面向過程變成的預處理使用mysqli_prepare就不在介紹
$dbConf=include 'conf.php';
- //打開
- $conn=new mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']);
- if(!$conn){
- die('數據庫打開失敗');
- }
- //執行增刪改查
- /*************數據查詢***************************/
- $sql='SELECT * from `t1` as t WHERE id2>?';
- $stmt=$conn->prepare($sql);
- if(!$stmt){
- die('sql語句有問題');
- }
- //綁定參數
- $id2=2;
- $stmt->bind_param('i',$id2);//不能寫成bind_param('i',2)
- //執行
- $stmt->execute();
- //將結果綁定發到指定的參數上
- $stmt->bind_result($id1, $id2);
- //獲取結果
- while ($tmp=$stmt->fetch()) {
- print_r('id1='.$id1.',id2='.$id2);
- echo '</br>';
- }
- //關閉
- $stmt->free_result();//釋放結果
- $stmt->close();//關閉預編譯的指令.
- $conn->close();//關閉連接
預處理綁定參數中參數類型說明如下
php使用PDO方式連接mysql
- $dbConf=include 'conf.php';
- //打開
- $pdo=myPDO::getInstance($dbConf);
- /*************數據查詢***************************/
- $sql='SELECT t.`id1` from `t1` as t';
- $rs=$pdo->query($sql);
- $data=$rs->fetchAll();//取出所有結果
- print_r($data);
- /*************數據更新***************************/
- $sql='UPDATE t1 SET t1.`id1`=11 WHERE t1.`id1`=1';
- $rs=$pdo->query($sql);
- /**
- * 數據庫pdo連接
- */
- class myPDO{
- private static $pdo;
- private function __construct(){
- //code
- }
- private function __clone(){
- //code
- }
- /**
- * 獲取實例化的PDO,單例模式
- * @return PDO
- */
- public static function getInstance($dbConf){
- if(!(self::$pdo instanceof PDO)){
- $dsn ="mysql:host=".$dbConf['host'].";port=".$dbConf['port'].";dbname=".$dbConf['dbName'].";charset=".$dbConf['charSet'];
- try {
- self::$pdo = new PDO($dsn,$dbConf['user'], $dbConf['password'], array(PDO::ATTR_PERSISTENT => true,PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); //保持長連接
- self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
- } catch (PDOException $e) {
- print "Error:".$e->getMessage()."<br/>";
- die();
- }
- }
- return self::$pdo;
- }
- }
