PHP鏈接到mysql的方法--mysqli和PDO

    php鏈接到mysql數據庫,經典的方式就是使用mysql_connect(),具體代碼以下:php

mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
mysql_select_db($db_name);

     瀏覽器提示: 本擴展自 PHP 5.5.0 起已廢棄,並在未來會被移除。應使用 MySQLi 或 PDO_MySQL 擴展來替換之。因而一通搜索,就有了接下來這篇文章的來源。
         這裏的 mysql是一個擴展的API ,目的是爲了簡化php對mysql數據庫的 操做
mysqli
          mysqli是對mysql的一個加強版,出如今PHP 5 及之後的版本。它主要在一下幾方面比mysql加強了:
        一、面向對象接口; 二、 prepared語句支持(譯註:關於prepare請參閱mysql相關文檔); 三、 多語句執行支持; 四、 事務支持; 五、 加強的調試能力; 六、 嵌入式服務支持
<?php 
$link = mysqli_connect("localhost","root","123456","test") or die("Error " . mysqli_error($link)); //鏈接,test爲數據庫的名稱
$query = "SELECT name FROM userInfo" or die("Error in the consult.." . mysqli_error($link));//查詢
$result = mysqli_query($link, $query);//查詢的結果
while($row = mysqli_fetch_array($result)) { 
    echo $row["name"] . "<br>"; 
}
?>

        上面的這段代碼是一個完整的從鏈接到查詢再到關閉數據庫的一個例子。從該例子中能夠看到,mysql_connect()和mysqli_connect()函數的用法上的小區別。

//mysql
mysql_connect("localhost","root","123456");
mysql_select_db("userInfo");

//mysqli
mysqli_connect("localhost","root","123456","test");

     mysqli的鏈接數據庫方法中除了使用上述(又稱之爲面向過程)以外,另一種就是面向對象方式:

<?php
$mysqli = new mysqli("localhost","root","123456","test") //填寫mysql用戶名、密碼及數據庫的名稱
    or die("Could not connect to MySQL server!");
$mysqli->query("set names utf8"); //設置數據庫內數據的編碼,至關於同時設置客戶端、服務器端和腳本編碼方式。
    $sql  = "select * from userInfo";
$result = $mysqli->query($sql);
if($result){
    if($result->num_rows>0){
        while($row =$result->fetch_array()){//循環輸出結果集中的記錄
            echo ($row[0])." ";
            echo ($row[1])." ";
            echo ($row[2])." ";
            echo "<br/>";
        }
    }
}else{
    echo "Sorry!";
}
$result=NULL; 
$mysqli->close();
?>

         這種用法中,使用mysqli以前要先new一個對象,而後使用該實例 對象 進行操做。

​PDO
     PHP的一個數據對象,它提供了一個統一的鏈接數據庫的API, 它表明的是和數據庫之間的一個鏈接, 相似於java中的jdbc。
         簡單舉例以下:
<?php
$pdo = new PDO('pgsql:host=192.168.1.111;port=5432;dbname=anydb', 'anyuser', 'pw');//鏈接到數據庫
sleep(5);
$stmt = $pdo->prepare('SELECT * FROM sometable');
$stmt->execute();
$pdo = null;//關閉鏈接
?>

           因爲從PHP 6 開始要徹底使用PDO方式而非其餘方式鏈接數據庫,因此接下來詳細研究一番:
一、爲何要用PDO,用PDO有什麼好處?

    PDO(PHP數據對象),是PHP訪問數據庫的一個輕量級的統一接口。它提供了一個數據訪問抽象層,這也就是說不管什麼數據庫都能用相同的方法進行查詢或讀取。須要注意的是PDO自己並不能實現任何的數據庫功能,而是必需要使用一個具體數據庫的PDO驅動進行訪問數據庫服務。java

二、怎麼用PDO?mysql

     這裏咱們就以PHP的黃金搭檔mysql做爲例子看看:sql

     PDO_MYSQL:PDO_MYSQL是PDO接口可以完成鏈接mysql數據庫的驅動(注:僅使用於mysql 3.x以上版本)。數據庫

    安裝:打開php.ini文件,能夠找到以下代碼,這裏能夠看到mysql的驅動默認已經打開(前面沒有用於註釋的分號),若有鏈接其餘數據庫的須要,自行添加其餘數據庫的驅動程序(取出相應的項前面的分號,沒有的添上)。數組


//各數據庫的PDO驅動
extension=php_pdo.dll 
extension=php_pdo_firebird.dll //Firebird
extension=php_pdo_informix.dll //Informix
extension=php_pdo_mssql.dll    //sql server
extension=php_pdo_mysql.dll    //mysql
extension=php_pdo_oci.dll      //Oracle
extension=php_pdo_oci8.dll 
extension=php_pdo_odbc.dll     //DB2
extension=php_pdo_pgsql.dll    //PostgreSQL
extension=php_pdo_sqlite.dll   //SQLite

鏈接:經過建立PDO基類的實例建立鏈接。

//鏈接到數據庫
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
//處理鏈接錯誤
try {
    $db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    //查詢
    foreach($db->query('SELECT * from FOO') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

//關閉鏈接
$db = null;

    PDO方式鏈接數據庫mysql的實例:

<?php
    $dbms='mysql';       //數據庫 mysql
    $host='localhost';   //數據庫主機名
    $dbName='test';      //數據庫名
    $user='root';        //鏈接用戶名
    $pass='';            //密碼
    $dsn="$dbms:host=$host;dbname=$dbName";
    classdbextendsPDO{
       publicfunction__construct(){
            try{
                parent::__construct("$GLOBALS[dsn]",$GLOBALS['user'],$GLOBALS['pass']);
             }catch(PDOException$e){
                 die("Error: ".$e->__toString()."<br/>");
            }
       }
       publicfinalfunctionquery($sql){
            try{
                returnparent::query($this->setString($sql));
            }catch(PDOException$e){
                die("Error: ".$e->__toString()."<br/>");
            }
       }
       privatefinalfunctionsetString($sql){
            echo"處理查詢";
            return $sql;
       }
    }
    $db=new db();
    $db->setAttribute(PDO::ATTR_CASE,PDO::CASE_UPPER);
    foreach($db->query('select * from table_name') as $row){
       print_r($row);
    }
    $db->exec('delete from table_name where id=11');
?>

三、更多的PDO方法:

PDO::beginTransaction — 啓動一個事務
PDO::commit — 提交一個事務
PDO::__construct — 建立一個表示數據庫鏈接的 PDO 實例
PDO::errorCode — 獲取跟數據庫句柄上一次操做相關的 SQLSTATE
PDO::errorInfo — Fetch extended error information associated with the last operation on the database handle
PDO::exec — 執行一條 SQL 語句,並返回受影響的行數
PDO::getAttribute — 取回一個數據庫鏈接的屬性
PDO::getAvailableDrivers — 返回一個可用驅動的數組
PDO::inTransaction — 檢查是否在一個事務內
PDO::lastInsertId — 返回最後插入行的ID或序列值
PDO::prepare — Prepares a statement for execution and returns a statement object
PDO::query — Executes an SQL statement, returning a result set as a PDOStatement object
PDO::quote — Quotes a string for use in a query.
PDO::rollBack — 回滾一個事務
PDO::setAttribute — 設置屬性

PDOStatement::bindColumn — 綁定一列到一個 PHP 變量
PDOStatement::bindParam — 綁定一個參數到指定的變量名
PDOStatement::bindValue — 把一個值綁定到一個參數
PDOStatement::closeCursor — 關閉遊標,使語句能再次被執行。
PDOStatement::columnCount — 返回結果集中的列數
PDOStatement::debugDumpParams — 打印一條 SQL 預處理命令
PDOStatement::errorCode — 獲取跟上一次語句句柄操做相關的 SQLSTATE
PDOStatement::errorInfo — 獲取跟上一次語句句柄操做相關的擴展錯誤信息
PDOStatement::execute — 執行一條預處理語句
PDOStatement::fetch — 從結果集中獲取下一行
PDOStatement::fetchAll — 返回一個包含結果集中全部行的數組
PDOStatement::fetchColumn — 從結果集中的下一行返回單獨的一列。
PDOStatement::fetchObject — 獲取下一行並做爲一個對象返回。
PDOStatement::getAttribute — 檢索一個語句屬性
PDOStatement::getColumnMeta — 返回結果集中一列的元數據
PDOStatement::nextRowset — 在一個多行集語句句柄中推動到下一個行集
PDOStatement::rowCount — 返回受上一個 SQL 語句影響的行數
PDOStatement::setAttribute — 設置一個語句屬性
PDOStatement::setFetchMode — 爲語句設置默認的獲取模式。

Exception::getMessage — 獲取異常消息內容。
Exception::getPrevious — 返回異常鏈中的前一個異常
Exception::getCode — 獲取異常代碼
Exception::getFile — 獲取發生異常的程序文件名稱
Exception::getLine — 獲取發生異常的代碼在文件中的行號
Exception::getTrace — 獲取異常追蹤信息
Exception::getTraceAsString — 獲取字符串類型的異常追蹤信息
Exception::toString — 將異常對象轉換爲字符串
Exception::clone — 異常克隆
相關文章
相關標籤/搜索