PDO擴展為PHP訪問數(shù)據(jù)庫定義了一個輕量級的、一致性的接口,它提供了一個數(shù)據(jù)訪問抽象層,這樣,無論使用什么數(shù)據(jù)庫,都可以通過一致的函數(shù)執(zhí)行查詢和獲取數(shù)據(jù)。 在一些PHP管理系統(tǒng)需要開啟PDO和PDO_MySQL擴展,方法很簡單
專注于為中小企業(yè)提供網(wǎng)站制作、成都做網(wǎng)站服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)內(nèi)鄉(xiāng)免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
測試代碼如下:?php/**************************@Filename: pdotest.php@Content : PDO操作MySQL,Access(測試)**************************/if($_GET['db'] == 'mysql'){ $dns = 'mysql:host=localhost;dbname=test'; $dbuser = 'root'; $dbpass = 'root'; $db = new PDO($dns,$dbuser,$dbpass);}else{ $db = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=".getcwd()."http://test.mdb");}if($_POST['reg']){ $db-exec("INSERT INTO t_user (name,email) VALUES ('".$_POST['name']."','".$_POST['email']."') ;"); // header('Location:'.$_SERVER['PHP_SELF']); ? a href="pdotest.php"返回/a ?}else{ $html = 'div id="new" form action="'.$_SERVER['REQUEST_URI'].'" method="post" Name: input type="text" name="name" size="10" / Email: input type="text" name="email" size="15" / input type="submit" name="reg" value="Register" / /form/div'; $re = $db-query("SELECT uid,name,email FROM t_user ORDER BY email ;"); while($rs = $re-fetch()) { $userlisthtml .= 'trtd'.$rs['uid'].'/tdtd'.$rs['name'].'/tdtd'.$rs['email'].'/td/tr'; } $html .= 'div id="list" table border="1" captionUser List/caption thead trthID/ththName/ththEmail/th/tr /thead tbody'.$userlisthtml.' /tbody /table/div';}echo $html;?
//連接、查詢
try
{
$dbh
=
new
PDO('mysql:host=localhost;dbname=test',
$user,
$pass);
foreach($dbh-query('SELECT
*
from
FOO')
as
$row)
{
print_r($row);
}
$dbh
=
null;//釋放資源
}
catch
(PDOException
$e)
{
"錯誤!:
"
.
$e-getMessage()
.
"br/br";
die();
}
//執(zhí)行刪除操作,插入、修改與此類似,更改SQL語句即可
$count
=
$dbh-exec("DELETE
FROM
fruit
WHERE
colour
=
'red'");
就是操作數(shù)據(jù)庫的方法,
pdo就是把操作數(shù)據(jù)庫的函數(shù)封裝成一個pdo類,其間做了安全驗證而已。
在使用PDO之前首先要設(shè)置PHP.INI文件,使PHP支持PDO,因為PHP5默認是不支持的。在PHP安裝目錄下找到PHP.INI文件,打開并搜索extension=php_pdo.dll 和 extension=php_pdo_mysql.dll,將前面的分號(;)去掉,重啟apache即可。
接下來我們就開始寫PHP代碼了,首先是連接數(shù)據(jù)庫,看下面的例子:
!--?php
define('DB_NAME', 'pdo_test');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
try {
$DBH = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD);
$DBH---exec('SET CHARACTER SET '.DB_CHARSET);
$DBH-exec('SET NAMES '.DB_CHARSET);
} catch (PDOException $e) {
print "Error!: " . $e-getMessage() . "br";
die();
}
?
連接成功后,我們需要對數(shù)據(jù)庫中的數(shù)據(jù)進行增刪改查操作,這里主要用到exec和query兩個函數(shù)。
示例:
!--?php
//增加數(shù)據(jù)
$sql_insert = 'Insert INTO wp_options(blog_id,option_name,option_value,autoload) VALUES (0,'.time().rand(1,100).','.time().rand(1,100).',\'no\')';
$back = $DBH---exec($sql_insert); //返回 bool 的true or fal
$lastInsertId = $DBH-lastInsertId();
//刪除數(shù)據(jù)
$sql_delete = 'Delete FROM wp_options Where option_id='.$lastInsertId;
$back = $DBH-exec($sql_delete); //返回 bool 的true or fal
$lastInsertId = $DBH-lastInsertId();
//更新數(shù)據(jù)
$sql_update = 'Update wp_options SET option_name = \''.time().rand(1,100).'\' Where option_id='.$lastInsertId;
$lastUpdateId = $DBH-lastInsertId(); //返回的對應(yīng)的操作的id
//查詢數(shù)據(jù)
$sql_select = 'Select option_id FROM wp_options orDER BY option_id DESC LIMIT 4 ';
$back = $DBH-query($sql_select); //返回一個對象 這個對象可以用foreach 直接遍歷循環(huán) 循環(huán)的為查詢的結(jié)果集
$back = $DBH-query($sql_select)-fetch(); //返回一條數(shù)據(jù)結(jié)果 這個對象可以用foreach 直接遍歷循環(huán) 循環(huán)的為查詢的結(jié)果集
$back = $DBH-query($sql_select)-fetchAll(); //返回一個數(shù)組 這個對象可以用foreach 直接遍歷循環(huán) 循環(huán)的為查詢的結(jié)果集
$back = $DBH-query($sql_select)-fetchColumn(0); //返回一個字段字符串,這個字符串是返回的記錄的第一條記錄的第一個字段
?
到這里,PDO的基本操作基本上結(jié)束了。對于一般的企業(yè)網(wǎng)站,小型的管理系統(tǒng)基本上能滿足了,但是,如果我們開發(fā)大型網(wǎng)站或者邏輯較復(fù)雜的管理系統(tǒng),僅僅靠數(shù)據(jù)的讀寫是遠遠不夠的,我們可能還需要對數(shù)據(jù)庫的存儲過程、事務(wù)等對象進行操作,下面我們繼續(xù)看看用PDO是如何實現(xiàn)的。如果還有更多問題可以去后盾網(wǎng)論壇問題求助專區(qū),希望我的回答對你有幫助!