php PDO串連mysql~高手略過

來源:互聯網
上載者:User

標籤:php pdo串連mysql

最近在linux裝了新的環境,php5.6+mysql5.5+nginx。然後用原來的mysql連結資料庫出現的錯誤。

原因就是說串連資料庫的方法太舊。建議我用mysqli和PDO來連結資料庫。

好吧,咱也不能落後,使用mysqli的確也簡單了不少,但是PDO貌似更簡單。效率也會得到提升。根據官方文檔,貌似對於sql注入的一些風險也做了屏蔽。所以今天寫的 部落格就是關於php用PDO串連mysql的一些介紹啦!


【PDO是啥】

PDO是PHP 5新加入的一個重大功能,因為在PHP 5以前的php4/php3都是一堆的資料庫擴充來跟各個資料庫的串連和處理,什麼php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等擴充來串連MySQL、PostgreSQL、MS SQL Server、SQLite,同樣的,我們必須藉助 ADOdb、PEAR::DB、PHPlib::DB之類的資料庫抽象類別來協助我們,無比煩瑣和低效,畢竟,php代碼的效率怎麼能夠我們直接用C/C++寫的擴充效率高捏?所以嘛,PDO的出現是必然的,大家要平靜學習的心態去接受使用,也許你會發現能夠減少你不少功夫哦。



下面說說PDO基於php的版本:

PDO 是 PHP 5.1 發行的,也就是說,在 5.1 之前的版本是不支援 PDO。在PHP5.0的PECL擴充中也可以使用。


PDO如何使用:

這裡我們就以PHP的黃金搭檔mysql作為例子看看:

     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);  


<?phpheader('content-type:text/html;charset=utf-8');try {      $db = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', '');      //查詢  $rows = $db->query('SELECT * from members')->fetchAll(PDO::FETCH_ASSOC);$rs = array();    foreach($rows as $row) {          $rs[] = $row;     }      $db = null;  } catch (PDOException $e) {      print "Error!: " . $e->getMessage() . "<br/>";      die();  }print_r($rs);?>



//關閉串連  $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');?>



不明白啥意思,俺們來慢慢講講。這行:
$dsn = "mysql:host=localhost;dbname=test";
就是構造我們的DSN(資料來源),看看裡面的資訊包括:資料庫類型是mysql,主機地址是localhost,資料庫名稱是test,就這麼幾個資訊。不同資料庫的資料來源構造方式是不一樣的。

$db = new PDO($dsn, ‘root‘, ‘‘);
初始化一個PDO對象,建構函式的參數第一個就是我們的資料來源,第二個是串連資料庫伺服器的使用者,第三個參數是密碼。我們不能保證串連成功,後面我們會講到異常情況,這裡我們姑且認為它是串連成功的。

$count = $db->exec("INSERT INTO foo SET name = ‘heiyeluren‘,gender=‘男‘,time=NOW()");
echo $count;
調用我們串連成功的PDO對象來執行一個查詢,這個查詢是一個插入一條記錄的操作,使用PDO::exec() 方法會返回一個影響記錄的結果,所以我們輸出這個結果。最後還是需要結束對象資源:
$db = null;

預設這個不是長串連,如果需要資料庫長串連,需要最後加一個參數:array(PDO::ATTR_PERSISTENT => true)變成這樣:
$db = new PDO($dsn, ‘root‘, ‘‘, array(PDO::ATTR_PERSISTENT => true));

一次操作就這麼簡單,也許跟以前的沒有太大區別,跟ADOdb倒是有幾分相似。


更多的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 — 異常複製  



php PDO串連mysql~高手略過

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.