PHP-PDO物件使用常用方法
阿新 • • 發佈:2018-12-31
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);// 關閉