原文地址:https://mariadb.com/resources/blog/developer-quickstart-php-data-objects-and-mariadb/
原文作者:Rob Hedgpeth
上篇文章,我介绍了使用PHP的MySQL增强插件–MySQLi,来连接MariaDB数据库并与之通信的过程。最后,当你写PHP代码来连接MariaDB并与之交互时,你可能会使用两个常用选项之一:MySQLi 或者 PHP数据对象(PDO)。
PDO插件旨在定义一个轻量级、一致性的接口,用在PHP访问数据库,就像MySQLi一样。实际上,PDO和MySQLi都提供了一个面向对象的API,但是MySQLi也提供了一个面向过程的API,这使得PHP新手更容易理解。
现在,如果您熟悉原生的PHP MySQL驱动,您可能会发现迁移到面向过程的MySQLi接口更加容易。另一方面,一旦您掌握了PDO,您可以使用它连接任何数据库,这对于从另一个数据库切换到MariaDB非常有用。
在这篇文章,我将深入PDO并演示如何使用它与MariaDB进行通信。 因此,让我们进入一个应用程序,了解如何使用PDO连接和查询MariaDB数据库。
本文中,我将重点介绍使用PDO连接MariaDB数据库并与之通信的一些基本细节。我探讨的所有内容都将基于Rolodex应用程序的代码,如果您想深入了解代码,可以查看这里。
准备数据库
在开始编码之前,重点要注意的是这将使用一个名为rolodex
的数据库。
CREATE DATABASE `rolodex`;
数据库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数据库,我创建了一个名为 config.php 的新文件,它包含了配置项和数据库连接对象来在跨PHP页面中重用。PDO扩展便于与底层MariaDB数据库进行连接和通信。
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文件中,我首先定义了变量,包含主机地址、用户名、密码和默认数据库等,这些变量用于创建新的PDO连接对象,该对象包含各种配置项,您可以使用它来定制您的环境。
执行SQL
使用并重用 config.php
中的PDO
连接很简单,只需在另一个PHP页面中引用PHP代码库即可。
<?php
// Include the database connection file
include_once("config.php");
...
?>
然后,有了已建立的连接,您就可以使用PDO扩展的多种功能,包括使用 PDO::query 执行查询。注意,我还演示了如何将结果直接映射到一个名为 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');
?>
或者,在需要处理动态插入参数值的情况下,可以使用 PDO::prepare。
插入数据
使用 PDO::prepare 插入 contacts
$stmt = $pdo->prepare("INSERT INTO contacts (name,age,email) VALUES(?, ?, ?)");
$stmt->execute([$name, $age, $email]);
更新数据
使用 PDO::prepare 更新 contacts
$stmt = $pdo->prepare("UPDATE contacts SET name = ?, age = ?, email = ? WHERE id = ?");
$stmt->execute([$name, $age, $email, $id]);
删除数据
使用 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的许多其他特性和功能,请务必查看开发者中心和我们新的GitHub开发者代码中心组织。在那里您可以找到更多类似的内容,横跨了多种其他技术、用例甚至编程语言。
您还可以在官方文档中更深入地了解MariaDB功能。
和往常一样,感谢我们优秀的社区!如果您想参与贡献,可以在GitHub上找到我们,或直接发送反馈到邮箱developers@mariadb.com,或加入新的MariaDB社区对话(Slack)!