国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php使用PDO方法詳解

2024-05-04 23:29:31
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了php使用PDO方法,較為詳細的分析了PDO各種操作方法與技巧,具有一定的參考借鑒價值,需要的朋友可以參考下
 
 

本文詳細分析了php使用PDO方法。分享給大家供大家參考。具體分析如下:

PDO::exec:返回的是int類型,表示影響結果的條數.

復制代碼代碼如下:
PDOStatement::execute

 

返回的是boolean型,true表示執行成功,false表示執行失敗,這兩個通常出現在如下代碼:

復制代碼代碼如下:
$rs0 = $pdo->exec($sql);
$pre = $pdo->prepare($sql);
$rs1 = $pre->execute();

 

一般情況下可以用$rs0的值判斷SQL執行成功與否,如果其值為false表示SQL執行失敗,0表示沒有任何更改,大于0的值表示影響了多少條記錄.

但是$rs1只能返回SQL執行成功與否,如果需要獲取影響的記錄數需要使用$pre->rowCount();

我個人喜歡使用 MySQL,所以我的 extensions.ini 中有這二行.

復制代碼代碼如下:
extension=pdo.so
extension=pdo_mysql.so

 

接著在程式中,代碼如下:

復制代碼代碼如下:
define('DB_NAME','test'); 
define('DB_USER','test'); 
define('DB_PASSWD','test'); 
define('DB_HOST','localhost'); 
define('DB_TYPE','mysql'); 
$dbh = new PDO(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWD);

文中的使用常數設定是我個人的習慣,各位不用像我這么麻煩,當像上面的操作,$dbh 本身就是代表了PDO的連線了,那要怎樣使用PDO呢?

 

第一種,懶人法 query,什么都不用想,像平常一樣的使用 query 的函式,代碼如下:

復制代碼代碼如下:
$sql = 'select * from test'; 
foreach ( $dbh->query($sql) as $value) 

    echo $value[col]; 
};

第二種,自動帶入法 prepare,我個人使用PDO后,偏好利用 prepare 的函式來進行作動 prepare 的好處是可以先寫好 SQL 碼,并且在稍后自動帶入我們要的資料.

 

這個我想最大的好處是比起直接利用 query 可以減少許多安全性的問題,首先,我們利用 prepare 進行 SQL 碼的設定,在利用bindparm 來進行設定的動作,代碼如下:

復制代碼代碼如下:
$sth = $dbh->prepare('update db set zh_CN= :str where SN=:SN'); 
$sth->bindParam(':str',$str,PDO::PARAM_STR,12); 
$sth->bindParam(':SN',$SN); 
$sth->execute();

請注意文中的 :str 及 :SN,當我們利用 bindParam的函式,可以利用 :word 來指定系統需要套用的部份,像是我們利用:str 及 :SN 來指定,而實際的內容,就靠bindParam還可以指定我們要輸入的型態。

 

首先我們先看 :str 的指定,:str 由於我確定資料是屬於文字,因此利用 PD::PARAM_STR 來告訴程式“這個是字串喲”,并且給一個范圍,也就是長度是12個位元。

我們也可以不要那么復雜,像 :SN,雖然也是用 bindParam 來指定,但是我們省略了型態及長度,PHP 會用該變數預設的型態來套用.

最后呢,就是利用 $sth->execute(); 來進行執行的動作,基本上不難,甚至可以說很簡單呢.

如果你有大量需要重復套用的資料,你就可以拼了命的重新利用 bindParam 來指定,比如我的:str 及 :SN 如果有十筆資料,我也可以這樣子直接新增到資料庫,代碼如下:

復制代碼代碼如下:
$sth = $dbh->prepare('insert into db ("zh_CN","zh_TW")values(:str , :SN'); 
foreach ($array => $value ) 
{
 $sth->bindParam(':str',$value[str],PDO::PARAM_STR,12); 
 $sth->bindParam(':SN',$value[SN]); 
 $sth->execute(); 
}

甚至強者如我朋友,把所有可能的 SQL 全寫在一個檔案后面,后來的過程SQL的部份就變成全用變數帶進去了,反正資料可以用現成的方式套用嘛.

 

那,如果利用 prepare 的方式來 select,關鍵字當然也可以像上面的方式利用:word 來指定,代碼如下:

復制代碼代碼如下:
$sth = $dbh->prepare('select * from db where SN = :SN'); 
$sth->bindParam(':SN',$value[SN]); 
$sth->execute(); 
while($meta = $sth->fetch(PDO::FETCH_ASSOC)) 

 echo $meta["name"]; 
}

這樣新出現的是 fetch,跟mysql_fetch_row() 的意思差不多,但是在 fetch() 中我們發現多了一個 PDO::FETCH_ASSOC 這個東西.

 

fetch() 提供了許多獲取資料的方式,而 PDO::FETCH_ASSOC 指的就是傳回下一筆資料的欄位名及值啦

比如上例,利用 $meta 來取得 fetch 傳回的資料,此時 $meta 的元素名稱就是資料庫的欄位名稱,而內容當然就是值本身這個跟你利用 mysql_fetch_row() 時不一樣,因為除了欄位名稱,mysql_fetch_row() 還會依照順利將元素名稱除了欄位外在多給予一個以序號的方式為基礎的元素,那難道 PDO 沒有嗎?

當然有,只要將 PDO::FETCH_ASSOC 改為 PDO::FETCH_BOTH,那用法就跟 mysql_fetch_row() 沒什么兩樣了.

如何除錯

除錯是所有程式設計師中心中永遠的痛,我們使用 PDO 要如何除錯呢?

其實 PDO 已經提供了二個非常方便的函式 errorInfo() 及 errorCode()

用法也是世界簡單,每當我們利用 execute() 執行后,如果有錯誤,那 errorInfo() 及 errorCode() 中就會有內容,我們就可以這樣子做,代碼如下:

復制代碼代碼如下:
$sth = $dbh->prepare('select * from db where SN = :SN'); 
$sth->bindParam(':SN',$value[SN]); 
$sth->execute(); 
if ($sth->errorCode()) 

 echo "有錯誤!有錯誤!"; 
 print_r($sth->errorInfo()); 
}

而 $sth->errorInfo() 會是一個陣列,這個陣列有三個值:

 

0 為SQLSTATE error code

1 為你所使用的 Driver 所傳回的錯誤碼

2 為你所使用的 Driver 所傳回的錯誤訊息

希望本文所述對大家的php程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桃园市| 鄂温| 天柱县| 廉江市| 贺兰县| 通河县| 英山县| 永德县| 甘泉县| 竹北市| 伊金霍洛旗| 洪江市| 从化市| 丹江口市| 五指山市| 江陵县| 新晃| 屯昌县| 鲜城| 嵊州市| 宜宾县| 阿拉善右旗| 绥芬河市| 山阳县| 涞源县| 梅河口市| 新蔡县| 墨脱县| 安西县| 平南县| 德兴市| 繁昌县| 罗源县| 巴马| 昆明市| 乐陵市| 潮安县| 通许县| 长沙县| 长丰县| 杭锦旗|