原文地址:https://mariadb.com/resources/blog/developer-quickstart-php-data-objects-and-mariadb/
原文作者:Rob Hedgpeth
上篇文章,我介紹了使用PHP的MySQL增強插件–MySQLi,來連接MariaDB數(shù)據(jù)庫并與之通信的過程。最后,當你寫PHP代碼來連接MariaDB并與之交互時,你可能會使用兩個常用選項之一:MySQLi 或者 PHP數(shù)據(jù)對象(PDO)。
PDO插件旨在定義一個輕量級、一致性的接口,用在PHP訪問數(shù)據(jù)庫,就像MySQLi一樣。實際上,PDO和MySQLi都提供了一個面向?qū)ο蟮腁PI,但是MySQLi也提供了一個面向過程的API,這使得PHP新手更容易理解。
現(xiàn)在,如果您熟悉原生的PHP MySQL驅(qū)動,您可能會發(fā)現(xiàn)遷移到面向過程的MySQLi接口更加容易。另一方面,一旦您掌握了PDO,您可以使用它連接任何數(shù)據(jù)庫,這對于從另一個數(shù)據(jù)庫切換到MariaDB非常有用。
在這篇文章,我將深入PDO并演示如何使用它與MariaDB進行通信。 因此,讓我們進入一個應用程序,了解如何使用PDO連接和查詢MariaDB數(shù)據(jù)庫。

本文中,我將重點介紹使用PDO連接MariaDB數(shù)據(jù)庫并與之通信的一些基本細節(jié)。我探討的所有內(nèi)容都將基于Rolodex應用程序的代碼,如果您想深入了解代碼,可以查看這里。
準備數(shù)據(jù)庫
在開始編碼之前,重點要注意的是這將使用一個名為rolodex的數(shù)據(jù)庫。
CREATE DATABASE `rolodex`;
數(shù)據(jù)庫rolodex包含一張表,contacts,它用于存儲基本信息。
CREATE TABLE `rolodex`.`contacts` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
`age` INT(3) NOT NULL,
`email` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`)
);
Rolodex應用運行所需的SQL可以從這個文件里找到 schema.sql。
配置應用
為了方便在Rolodex PHP應用中使用MariaDB數(shù)據(jù)庫,我創(chuàng)建了一個名為 config.php 的新文件,它包含了配置項和數(shù)據(jù)庫連接對象來在跨PHP頁面中重用。PDO擴展便于與底層MariaDB數(shù)據(jù)庫進行連接和通信。
CONFIG.PHP
<?php
$dsn = "mysql:host=<insert_host_address_here>;dbname=rolodex;charset=utf8mb4";
$options = [
PDO::ATTR_EMULATE_PREPARES => false, // Disable emulation mode for "real" prepared statements
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Disable errors in the form of exceptions
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Make the default fetch be an associative array
];
try {
$pdo = new PDO($dsn, "<insert_user_here>", "<insert_password_here>", $options);
}
catch (Exception $e) {
error_log($e->getMessage());
exit('Something bad happened');
}
?>
在config.php文件中,我首先定義了變量,包含主機地址、用戶名、密碼和默認數(shù)據(jù)庫等,這些變量用于創(chuàng)建新的PDO連接對象,該對象包含各種配置項,您可以使用它來定制您的環(huán)境。
執(zhí)行SQL
使用并重用 config.php中的PDO連接很簡單,只需在另一個PHP頁面中引用PHP代碼庫即可。
<?php
// Include the database connection file
include_once("config.php");
...
?>
然后,有了已建立的連接,您就可以使用PDO擴展的多種功能,包括使用 PDO::query 執(zhí)行查詢。注意,我還演示了如何將結(jié)果直接映射到一個名為 Contact 的類。
使用 PDO::query 查詢 contants:
<?php
// Include the database connection file
include_once("config.php");
// PHP class
class Contact {
public $id;
public $name;
public $age;
public $email;
}
// Fetch contacts (in descending order)
$contacts = $pdo->query( "SELECT * FROM contacts ORDER BY id DESC")->fetchAll(PDO::FETCH_CLASS, 'Contact');
?>
或者,在需要處理動態(tài)插入?yún)?shù)值的情況下,可以使用 PDO::prepare。
插入數(shù)據(jù)
使用 PDO::prepare 插入 contacts
$stmt = $pdo->prepare("INSERT INTO contacts (name,age,email) VALUES(?, ?, ?)");
$stmt->execute([$name, $age, $email]);
更新數(shù)據(jù)
使用 PDO::prepare 更新 contacts
$stmt = $pdo->prepare("UPDATE contacts SET name = ?, age = ?, email = ? WHERE id = ?");
$stmt->execute([$name, $age, $email, $id]);
刪除數(shù)據(jù)
使用 PDO::prepare 刪除 contacts
$stmt = $pdo->prepare("DELETE FROM contacts WHERE id = ?");
$stmt->execute([$id]);
如您所見,開始使用PDO和MariaDB很容易,但我們只觸及了其表面。如果你想親自看看PHP和MariaDB還能做些什么,可以從新的GitHub倉庫 PHP Data Object Quickstart 中Rolodex應用程序的完整源碼開始。
了解更多
如果您想了解更多關于JSON和MariaDB的功能,或者關于MariaDB的許多其他特性和功能,請務必查看開發(fā)者中心和我們新的GitHub開發(fā)者代碼中心組織。在那里您可以找到更多類似的內(nèi)容,橫跨了多種其他技術、用例甚至編程語言。
您還可以在官方文檔中更深入地了解MariaDB功能。
和往常一樣,感謝我們優(yōu)秀的社區(qū)!如果您想?yún)⑴c貢獻,可以在GitHub上找到我們,或直接發(fā)送反饋到郵箱developers@mariadb.com,或加入新的MariaDB社區(qū)對話(Slack)!




