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 = 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() 如 $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 = 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 被改變.

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE

Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版
好用的JavaScript開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

Atom編輯器mac版下載
最受歡迎的的開源編輯器