來源網址:http://www.xspace.idv.tw/bo_blog/read.php?204
PDO 連接資料的方式,都是統一化,且非常簡單及方便:
1.連接數據庫:
PDO提供了統一的接口:PDO 對象。
<?php
$db = new PDO(
"driver_name:dbname=db_name;host=hostname/IP;[charset=char_type]", // (A) 連接字符串
"db_username", // (B) db用戶名
"db_password" // (C) db密碼
);
?>
說明:PDO 有三個參數
(A) 連接字符串:
driver_name 是使用的 PDO 驅動,可以為:mysql, mssql, sybase, dblib, firebird, oci, odbc, pgsql, sqlite, sqlite2
db_name 是要連結的資料庫名稱;
hostname/IP 是指要連接到哪裡,如果是本地則為 localhost 或 127.0.0.1
[charset=char_type] 是可選的,用來設置字符類型。
(B) 連接資料庫的用戶名
(C) 連接資料庫的密碼
連接範例:
<?php
$db = new PDO(
"mysql:dbname=test;host=localhost;charset=utf-8",
"testuser",
"testpass"
);
echo "Successfully created a PDO object";
?>
<?php
"this_is_not_a_pdo_module:dbname=test;host=localhost",
"testuser",
"testpass"
);
echo "Successfully created a PDO object";
?>
而我們可以用一種優雅的方式來處理,即拋出 PDO 異常來處理錯誤
<?php
{
$db = new PDO(
"this_is_not_a_pdo_modul:dbname=test;host=localhost",
"testuser",
"testpass"
);
}
catch( PDOException $e )
{
die( $e->getMessage() );
}
echo "Successfully created a PDO object";
?>
could not find driver
或
SQLSTATE[HY000] [7] FATAL: database "pdo2" does not exist
• PDO::ERRMODE_WARNING 顯示警告錯
• PDO::ERRMODE_EXCEPTION 拋出異常
範例:
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
(包括 PDO::CASE_LOWER,PDO::CASE_NATURAL,PDO::CASE_UPPER ),來確定返回的字段名稱的大小寫。
(包括 PDO::NULL_NATURAL,PDO::NULL_EMPTY_STRING,PDO::NULL_TO_STRING )來指定數據庫返回的 NULL 值在 PHP 中對應的數值。
CREATE TABLE `test` (
`id` smallint(6) unsigned NOT NULL auto_increment,
`name ` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf-8 AUTO_INCREMENT=1;
不使用預處理語句的方式:
$db = new PDO('mysql:dbname=test;host=localhost;charset=utf-8',testuser','testpass');
$stmt=$db->query("select * from test");
{
print_r( $row );
}
?>
1 - Bruce_Wu
Array
(
[id] => 1
[0] => 1
[name] => Bruce_Wu
[1] => Bruce_Wu
)
$db = new PDO('mysql:dbname=test;host=localhost;charset=utf-8',testuser','testpass');
$stmt = $db->prepare( "SELECT * FROM test" );
$stmt->execute();
print_r( $stmt->fetch() );
?>
$db = new PDO('mysql:dbname=test;host=localhost;charset=utf-8',testuser','testpass');
$stmt = $db->prepare( "SELECT * FROM test WHERE name = :name" );
$name = "Bruce_Wu";
$stmt->bindParam( ":name", $name );
$stmt->execute();
while( $row = $stmt->fetch() )
{
print_r( $row );
}
?>
這裡,bindParam 將 $name 變量綁定到了 :name 域,執行時會自動將改變量載入。
$stmt = $db->prepare(
"INSERT INTO test
( id, name )
VALUES
( :id, :name )"
);
array(
":id" => "2",
":name" => "david"
)
);
?>
實現插入數據資料也可以像綁定數據資料一樣來 quote 數據,這裡給出通過在 execute 中給定輸入參數來自動 quote
try {
$dbh->query("UPDATE ...");
$dbh->query("UPDATE ...");
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
}
$stmt = $dbh->prepare("CALL sp_set_string(?)");
$stmt->bindParam(1, $str);
$str = 'foo';
$stmt->execute();
?>
$stmt = $dbh->prepare("CALL sp_get_string(?)");
$stmt->bindParam(1, $ret,PDO:ARAM_STR, 4000);
if ($stmt->execute()) {
echo "Got $ret\n";
}
$stmt = $dbh->prepare("SELECT extension, name from CREDITS");
if ($stmt->execute()) {
$stmt->bindColumn('extension', $extension);
$stmt->bindColumn('name', $name);
while ($stmt->fetch(PDO::FETCH_BOUND)) {
echo "Extension: $extension\n";
echo "Author: $name\n";
}
}
?>