天天看點

PHP-PDO對象使用常用方法

PDO對象的使用

根據PHP官方計劃,PHP6正式到來之時,資料庫連結方式統一為PDO.使用PDO連結資料庫過程中,還是感覺挺好用的,給我印象最深的是可以相容跟更多資料庫、其次名稱式參數、對象的映射。

連接配接PDO有三種方式,下面以mysql為例:

第一種:直接連結資料庫,個人比較常用的選擇方式
try{
    //test是我自己的資料庫,host是我本機
    $dsn = "mysql:dbname=test;host=127.0.0.1";
    $user = 'root';
    $pwd = 'yangli';
    $pdo = new PDO($dsn, $user, $pwd);
}catch(PDOException $e){
    echo $e->getMessage(); // 抛出異常資訊
    exit;
}

第二種: 通過url形式
// $path就是你存放uri後面需要的資訊的那個檔案
$path = 'D:\MyProject\myshop\PHPExcel\db.txt';
![這就是db.txt檔案的内容](http://img.blog.csdn.net/20151117165336637)
$dsn = "uri:$path";
$user = 'root';
$pwd = 'yangli';
$pdo = new PDO($dsn, $user, $pwd);

第三種:通過php.ini配置檔案
![把dsn資訊直接寫到配置檔案中,需要重新開機apache](http://img.blog.csdn.net/20151117165529462)
$dsn = 'pdo';
$user = 'root';
$pwd = 'yangli';
$pdo = new PDO($dsn, $user, $pwd);
           

以上代碼是PHP連接配接pdo的三種方法,下面總結下個人在操作PDO對象中

一些常用方法。

PDO::exec(Sql); // 執行一條sql語句,傳回受影響的行數,沒有則傳回0,不支援select語句
PDO::query($sql); //查詢語句
PDO::prepare(); //
PDO::execute(); //
PDO::getAttribute();
PDO::errorInfo();
PDO::errorCode();
           

以上面這些方法做了一些用例:

PDO::exec() // PDO::exec()方法不支援select語句不會從結果集中擷取資料,傳回受修改或删除增加 SQL 語句影響的行數。如果沒有受影響的行,則 PDO::exec()  傳回 0。
$sql = <<<SQL
    CREATE TABLE `user`(
    id int unsigned not null auto_increment comment '主鍵ID',
    `user` varchar() not null comment '使用者名',
    `pwd` char() not null comment '密碼',
    `email` varchar() not null comment '郵箱',
    primary key(`id`)
    )ENGINE=MYISAM default charset=utf8;
SQL;
    $pdo->exec($sql); // 傳回0, 因為沒有受影響的行數

// 插入一條語句
$sql = "INSERT INTO user (user, pwd, email) VALUES('demo1', '".md5('demo1')."','[email protected]')";
$pdo->exec($sql) // 傳回1

//插入多條語句
$pwd = md5('demo1');
$sql = <<<SQL
INSERT INTO user(`user`, `pwd`, `email`)
VALUES
    ('demo2', '{$pwd}', '[email protected]'),
    ('demo3', '{$pwd}', '[email protected]'),
    ('demo4', '{$pwd}', '[email protected]'),
    ('demo5', '{$pwd}', '[email protected]')

SQL;
$res = $pdo->exec($sql);
if(!$res){
    echo '錯誤編号: '.$pdo->errorCode();
    echo '<br />錯誤資訊: '.print_r($pdo->errorInfo());
    exit;
}
echo '受影響的行數: '.$res.'條'; // 4

// 更新sql語句
$sql = 'UPDATE user SET email="[email protected]" WHERE id = 1';
$res = $pdo->exec($sql);
if(!$res){
    echo '錯誤的編号: '.$pdo->errorCode();
    echo '<br />錯誤的資訊: '.var_dump($pdo->errorInfo());
    exit;
}
echo '受影響的行數'.$res.'條';

// 删除語句
$sql = "DELETE FROM user  WHERE id = 1";
$res = $pdo->exec($sql);
if(!$res){
    echo '錯誤的編号: '.$pdo->errorCode();
    echo '<br />錯誤的資訊: '.var_dump($pdo->errorInfo());
    exit;
}
echo '受影響的行數'.$res.'條';
           

PDO::query(),PDO::prepare, PDO::execute()查詢語句

PDO::query()查詢
$sql = "SELECT user, email FROM user WHERE id = 2";
$stmt = $pdo->query($sql); // 傳回一個statement對象
foreach($stmt as $val){
    echo 'user: '.$val['user']; // 
    echo '<br />email: '.$val['email'];
}

// 下面是查詢的時候常用的方式
$sql = "SELECT id, uer, email FROM user";
$stmt = $pdo->prepare($sql); // 執行一條預處理
$sql = "SELECT * FROM user";
$stmt = $pdo->prepare($sql); //準備一條預處理sql語句),傳回一個statement對象;
// 執行一條預處理語句
if(!$stmt->execute()){
    echo '錯誤的編号: '.$pdo->errorCode();
    echo '<br />錯誤的資訊: '.var_dump($pdo->errorInfo());exit;
}
// PDO::fetchAll()擷取多條資訊
$res = $stmt->fetchAll(PDO::FETCH_ASSOC); // 第一個參數為傳回資料類型, 這
裡設定傳回為關聯數組
var_dump($res); // array()

 PDO::fetch();擷取一條資訊
$sql = "SELECT * FROM user WHERE id = 2";
$stmt = $pdo->prepare($sql); // 執行預處理語句,傳回statement對象
if(!$stmt->execute()){
    echo '錯誤标号: '.$pdo->errorCode();
    echo '錯誤的資訊: '.var_dump($pdo->errorInfo());exit;
}
$res = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($res);

           

設定資料庫連結屬性

PDO::ATTR_AUTOCOMMIT 
 PDO::ATTR_CASE 
 PDO::ATTR_CLIENT_VERSION 
 PDO::ATTR_CONNECTION_STATUS 
 PDO::ATTR_DRIVER_NAME 
 PDO::ATTR_ERRMODE 
 PDO::ATTR_ORACLE_NULLS 
 PDO::ATTR_PERSISTENT 
 PDO::ATTR_PREFETCH 
 PDO::ATTR_SERVER_INFO 
 PDO::ATTR_SERVER_VERSION 
 PDO::ATTR_TIMEOUT 

$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT); //事務是否送出,為1自動送出
$pao->setAttribute(PDO::ATTR_AUTOCOMMIT,);// 關閉