亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PHP PDO操作總結

2024-05-04 23:27:30
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP PDO操作總結,本文講解了使用PDO連接數據庫、執行基本查詢、獲取行數、遍歷結果集、轉義用戶輸入的特殊字符、exec()、預處理語句等內容,需要的朋友可以參考下
 
 

0x01:測試PDO是否安裝成功

運行如下代碼,如果提示參數錯誤,說明PDO已經安裝,如果說明對象不存在,則修改PHP配置文件php.ini,取消php_pdo_yourssqlserverhere.extis前面的注釋。

 

復制代碼代碼如下:

$test=new PDO();

 

0x02:連接數據庫

運行Apache服務器,確定服務器已經運行并且PDO安裝成功,那么下面我們就來連接數據庫吧。

 

復制代碼代碼如下:

$dsn = 'mysql:dbname=demo;host=localhost;port=3306';
$username = 'root';
$password = 'password_here';
try {
    $db = new PDO($dsn, $username, $password); 
} catch(PDOException $e) {
    die('Could not connect to the database:
' . $e);
}

 

0x03:基本查詢

在PDO中使用query和exec兩種方法使得對數據庫查詢變得非常簡單。如果你想得到查詢結果的行數exec是非常好用的,因此對SELECT查詢語句是非常有用的。

 

復制代碼代碼如下:

$statement = <<<SQL
    SELECT *
    FROM `foods`
    WHERE `healthy` = 0
SQL;
 
$foods = $db->query($statement);

 

如果上面的查詢是正確的,則$foods現在是一個PDO Statement對象,我們可以從這個對象中獲取我們需要的結果和一共查詢到了多少結果集。

0x04:獲取行數

如果利用的是Mysql數據庫,PDO Statement中包含了一個rowCount的方法可以獲取結果集中的行數,如下代碼所示:

復制代碼代碼如下:

echo $foods->rowCount;

 

0x05:遍歷結果集

PDO Statment可以使用forech語句進行遍歷,如下面代碼所示:

復制代碼代碼如下:

foreach($foods->FetchAll() as $food) {
    echo $food['name'] . '
';
}

 

PDO也支持Fetch方法,這個方法只返回第一條結果。

0x06:轉義用戶輸入的特殊字符

PDO提供了一個方法叫做quote,這個方法可以把輸入字符串中帶有引號的地方進行特殊字符轉義。

 

復制代碼代碼如下:

$input= this is's' a '''pretty dange'rous str'ing

 

使用quote方法轉移后:

復制代碼代碼如下:

$db->quote($input): 'this is/'s/' a /'/'/'pretty dange/'rous str/'ing'

 

0x07:exec()

PDO可以使用exec()方法實現UPDATE,DELETE和INSERT 操作,執行后它會返回受影響行數的數量:

 

復制代碼代碼如下:

$statement = <<<SQL
    DELETE FROM `foods`
    WHERE `healthy` = 1;
SQL;
echo $db->exec($statement);

 

0x08:預處理語句

盡管exec方法和查詢在PHP中仍然被大量使用和支持,但是PHP官網上還是要求大家用預處理語句的方式來替代。為什么呢?主要是因為:它更安全。預處理語句不會直接在實際查詢中插入參數,這就避免了許多潛在的SQL注入。

然而出于某種原因,PDO實際上并沒有真正的使用預處理,它是在模擬預處理方式,在將語句傳給SQL服務器之前會把參數數據插入到語句中,這使得某些系統容易受到SQL注入。

如果你的SQL服務器不真正的支持預處理,我們可以很容易的通過如下方式在PDO初始化時傳參來修復這個問題:

復制代碼代碼如下:

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

 

下面是我們的第一個預處理語句:

 

復制代碼代碼如下:

$statement = $db->prepare('SELECT * FROM foods WHERE `name`=? AND `healthy`=?');
$statement2 = $db->prepare('SELECT * FROM foods WHERE `name`=:name AND `healthy`=:healthy)';

 

如上面的代碼所示,有兩種創建參數的方法,命名的與匿名的(不可以同時出現在一個語句中)。然后你可以使用bindValue來敲進你的輸入:

復制代碼代碼如下:

$statement->bindValue(1, 'Cake');
$statement->bindValue(2, true);

 

$statement2->bindValue(':name', 'Pie');
$statement2->bindValue(':healthy', false);

 

注意使用命名參數的時候你要包含進冒號(:)。PDO還有一個bindParam方法,可以通過引用綁定數值,也就是說它只在語句執行的時候查找相應數值。

現在剩下的唯一要做的事情,就是執行我們的語句:

 

復制代碼代碼如下:

$statement->execute();
$statement2->execute();
 
//獲取我們的結果:
$cake = $statement->Fetch();
$pie  = $statement2->Fetch();

 

為了避免只使用bindValue帶來的代碼碎片,你可以用數組給execute方法作為參數,像這樣:

 

復制代碼代碼如下:

$statement->execute(array(1 => 'Cake', 2 => true));
$statement2->execute(array(':name' => 'Pie', ':healthy' => false));

 

0x09:事務

一個事務就是執行一組查詢,但是并不保存他們的影響到數據庫中。這樣做的好處是如果你執行了4條相互依賴的插入語句,當有一條失敗后,你可以回滾使得其他的數據不能夠插入到數據庫中,確保相互依賴的字段能夠正確的插入。你需要確保你使用的數據庫引擎支持事務。

0x10:開啟事務

你可以很簡單的使用beginTransaction()方法開啟一個事務:

復制代碼代碼如下:

$db->beginTransaction();
$db->inTransaction(); // true!

 

然后你可以繼續執行你的數據庫操作語句,在最后提交事務:

復制代碼代碼如下:

$db->commit();

 

還有類似MySQLi中的rollBack()方法,但是它并不是回滾所有的類型(例如在MySQL中使用DROP TABLE),這個方法并不是真正的可靠,我建議盡量避免依賴此方法。

0x11:其它有用的選項

有幾個選項你可以考慮用一下。這些可以作為你的對象初始化時候的第四個參數輸入。

 

復制代碼代碼如下:

$options = array($option1 => $value1, $option[..]);
$db = new PDO($dsn, $username, $password, $options);

 

 PDO::ATTR_DEFAULT_FETCH_MODE

你可以選擇PDO將返回的是什么類型的結果集,如PDO::FETCH_ASSOC,會允許你使用$result['column_name'],或者PDO::FETCH_OBJ,會返回一個匿名對象,以便你使用$result->column_name

你還可以將結果放入一個特定的類(模型),可以通過給每一個單獨的查詢設置一個讀取模式,就像這樣:

復制代碼代碼如下:

$query = $db->query('SELECT * FROM `foods`');
$foods = $query->fetchAll(PDO::FETCH_CLASS, 'Food');

 

PDO::ATTR_ERRMODE

上面我們已經解釋過這一條了,但喜歡TryCatch的人需要用到:PDO::ERRMODE_EXCEPTION。如果不論什么原因你想拋出PHP警告,就使用PDO::ERRMODE_WARNING。

PDO::ATTR_TIMEOUT

當你為載入時間而著急時,你可以使用此屬性來為你的查詢指定一個超時時間,單位是秒. 注意,如果超過你設置的時間,缺省會拋出E_WARNING異常, 除非 PDO::ATTR_ERRMODE 被改變.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲在线免费观看| 成人高h视频在线| 8050国产精品久久久久久| 亚洲精品wwww| 三级精品视频久久久久| 国产在线视频欧美| 欧美黄色小视频| xxxxxxxxx欧美| 亚洲在线www| 欧美国产第二页| 欧美日韩性视频在线| 日韩高清欧美高清| 韩剧1988免费观看全集| 91久久精品美女高潮| 久久久精品国产一区二区| 亚洲欧美日韩在线一区| 日韩欧美a级成人黄色| 欧美乱妇高清无乱码| 91在线观看免费高清| 欧美在线观看一区二区三区| 日韩av在线免费播放| 日韩av影视综合网| 一本一本久久a久久精品综合小说| xxav国产精品美女主播| 国产精品久久久久久久app| 欧美巨猛xxxx猛交黑人97人| 午夜精品99久久免费| 久久久久久一区二区三区| 色综合男人天堂| 国产精品手机播放| 在线观看国产成人av片| 色哟哟亚洲精品一区二区| 欧美日韩一区二区在线| 欧美电影免费观看大全| 久久久久久久久国产| 亚洲欧美激情精品一区二区| 国产精品久久久久久一区二区| 综合136福利视频在线| 久久久噜噜噜久久| 亚洲日韩欧美视频| 国产精品一区二区性色av| 亚洲激情久久久| 久久色在线播放| 91精品免费久久久久久久久| 国产综合福利在线| 国产69精品99久久久久久宅男| 色综合久久悠悠| 亚洲第一精品电影| 91色p视频在线| 日韩欧美亚洲范冰冰与中字| 国产欧美一区二区三区久久| 欧美成人在线网站| 国产欧美va欧美va香蕉在| 日韩在线视频观看| 欧美成人免费在线视频| 亚洲国产精品成人精品| 精品人伦一区二区三区蜜桃免费| 国产欧美一区二区三区在线看| 久久综合免费视频| 日韩电影中文字幕| 国产专区精品视频| 亚洲国产精品99久久| 国产成人精品视频在线观看| 日韩av综合网| 欧美尤物巨大精品爽| 亚洲精品黄网在线观看| 欧美插天视频在线播放| 7777精品视频| xxx一区二区| 欧美贵妇videos办公室| 亚洲老头同性xxxxx| 亚洲free性xxxx护士hd| 午夜精品久久久久久久久久久久| 中文字幕亚洲欧美日韩高清| 人人爽久久涩噜噜噜网站| 欧美激情精品久久久久久黑人| 不卡在线观看电视剧完整版| 国产成人精品日本亚洲专区61| 国产视频在线观看一区二区| 俺去了亚洲欧美日韩| 日韩精品亚洲视频| 成人黄色av播放免费| 亚洲成av人片在线观看香蕉| 最近2019年好看中文字幕视频| 中文字幕免费精品一区高清| 国产精品99一区| 日本亚洲欧美成人| 在线观看精品自拍私拍| 亚洲最大福利网| 国产精品男女猛烈高潮激情| 黑人与娇小精品av专区| 久久精品99久久香蕉国产色戒| 国产精品久久激情| 深夜精品寂寞黄网站在线观看| 精品高清一区二区三区| 精品日韩美女的视频高清| 欧美成人免费在线观看| 亚洲色图日韩av| 欧美一级大片在线免费观看| 欧美日韩亚洲一区二区三区| 97久久精品国产| 欧美最猛性xxxxx免费| 亚洲精品资源美女情侣酒店| 69视频在线播放| 国产精品嫩草视频| 亚洲精品v欧美精品v日韩精品| 日韩免费观看视频| 精品视频中文字幕| 日日骚久久av| 97在线视频观看| 欧美极品少妇与黑人| 欧美国产视频一区二区| 日本成人黄色片| 91精品久久久久久久久| 91av在线免费观看视频| 亚洲性视频网址| 精品国产欧美一区二区三区成人| 色婷婷av一区二区三区久久| 91精品视频一区| 欧美中文字幕在线观看| 欧美另类69精品久久久久9999| 久久久久久久网站| 欧美成年人视频网站欧美| 欧洲美女7788成人免费视频| 91精品国产综合久久香蕉的用户体验| 久久久久999| 蜜臀久久99精品久久久无需会员| 成人免费福利视频| 亚洲精品国产综合区久久久久久久| 丝袜亚洲欧美日韩综合| 久久久久国产视频| 久久久亚洲影院你懂的| www.久久久久久.com| 亚洲电影免费观看高清完整版在线观看| 国产又爽又黄的激情精品视频| 国产主播在线一区| 91久久精品一区| 97在线视频精品| 亚洲精品永久免费精品| 亚洲国产成人精品一区二区| 色悠久久久久综合先锋影音下载| 一本色道久久综合狠狠躁篇的优点| 57pao国产精品一区| 欧美精品久久久久久久久久| 北条麻妃一区二区在线观看| 在线视频亚洲欧美| 国产精品www色诱视频| 色吧影院999| 国产成人亚洲综合| 日本韩国欧美精品大片卡二| 91精品国产综合久久香蕉最新版| 亚洲精品久久久久久久久久久久久| 日韩精品中文字幕在线| 久久久久久国产精品久久| 日韩av电影院| 亚洲国产福利在线| 日韩电影免费在线观看中文字幕| 久久久亚洲网站| 伊人久久大香线蕉av一区二区| 久久久久中文字幕| 亚洲男人天堂九九视频| 国产精品劲爆视频| 在线播放日韩av| 精品福利一区二区|