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 被改變.

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

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

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境