1. 程式人生 > >PHP-PDO物件使用常用方法

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(30) not null comment '使用者名稱',
    `pwd` char(32) not null comment '密碼',
    `email` varchar(30) 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);

設定資料庫連結屬性

1. PDO::ATTR_AUTOCOMMIT 
2. PDO::ATTR_CASE 
3. PDO::ATTR_CLIENT_VERSION 
4. PDO::ATTR_CONNECTION_STATUS 
5. PDO::ATTR_DRIVER_NAME 
6. PDO::ATTR_ERRMODE 
7. PDO::ATTR_ORACLE_NULLS 
8. PDO::ATTR_PERSISTENT 
9. PDO::ATTR_PREFETCH 
10. PDO::ATTR_SERVER_INFO 
11. PDO::ATTR_SERVER_VERSION 
12. PDO::ATTR_TIMEOUT 

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