<?php /** * php data object * 資料庫訪問抽象層 * 基於驅動的 * * 1.安裝pdo * linux:--with-pdo-mysql=/user/mysql * window:1.安裝pdo的擴充:php_pdo.dll;2.安裝所需資料庫的驅動,例如:php_pdo_mysql.dll和php_pdo_sqlite.dll * * 2.phpinfo.php檢查是否存在PDO函數庫 * * 3.使用pdo * PDO類:與資料庫連接有關的類 * PDOStatement:準備語句,處理結果集(預先處理) * PDOException: * 很多常量 * * 4.建立PDO對象 * * 5.執行sql * 執行sql語句:exec、query、prepare * query:執行有結果集的,即select語句 * exec:用來執行有影響行數的,即:insert、update、delete * prepare:預先處理 * * 6.交易處理 *///找到資料庫驅動;可以將dsn放入本地或者遠程檔案當中(dsn.ini);//也可以寫在php設定檔當中:pdo.dsn.mysqldsn = mysql:host=localhost;dbname=hibernate//$oracleDsn = "oci:dbname=//localhost:3306/databasename";$dsn = "mysql:host=localhost;dbname=hibernate";$username = "root";$passwd = "root";//調優用的數組//getAttribute擷取調優的屬性的這隻自動認可為假//也可以建立之後再設定:$pdo->setAttribute($attribute, $value);$options = array(PDO::ATTR_AUTOCOMMIT=>1);try {$pdo = new PDO($dsn, $username, $passwd, $options);//$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);//設定錯誤報表模式//PDO::ERRMODE_EXCEPTION即使是警告也會顯示是異常$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);}catch (PDOException $e){echo "資料庫連接失敗".$e->getMessage();exit;}////echo $pdo->getAttribute(PDO::ATTR_AUTOCOMMIT)."<br>";//echo $pdo->getAttribute(PDO::ATTR_CLIENT_VERSION)."<br>";//echo $pdo->getAttribute(PDO::ATTR_SERVER_INFO)."<br>";//echo $pdo->getAttribute(PDO::ATTR_SERVER_VERSION)."<br>";//echo $pdo->getAttribute(PDO::ATTR_DRIVER_NAME)."<br>";/** * 更新操作 * Enter description here ... * @var unknown_type */$update = "update users set name = 'budi' where id > 12";//更新操作try{//返回影響的行數$num = $pdo->exec($update);echo "最後插入的自動成長的id".$pdo->lastInsertId();}catch (PDOException $e){echo $e->getMessage();}if ($num){echo "執行成功";echo $num ."<br>";}else{echo $pdo->errorCode()."<br>";echo $pdo->errorInfo();}/** * 查詢操作 * Enter description here ... * @var unknown_type */$select = "select * from users where id < 12";//查詢操作try{//返回影響的行數$stmt = $pdo->query($select);foreach ($stmt as $row){print_r($row)."<br>";}}catch (PDOException $e){echo $e->getMessage();}/** * 交易處理機制 * 1.關閉自動認可 * 2.開啟事務 * 3.執行語句 * 4.提交更新 */try {//關閉自動認可$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);//開啟事務$pdo->beginTransaction();$price = 500.00;$sql = "update users set price=price+{$price} where id = 2";$pdo->exec($sql);$sql = "update users set price=price+{$price} where id = 3";$pdo->exec($sql);//提交更新$pdo->commit();}catch (PDOException $e){echo $e->getMessage();//復原事務$pdo->rollBack();}?>