PHP 5.5 版本之前,我们有用于访问 MySQL 数据库的 mysql_ 命令,但由于安全性不敷,它们终极被弃用。
mysql_ 的弃用带来了访问数据库的两种紧张方法:mysqli 和 PDO 库。

-- Rishabh Kandari(作者)

大约 80% 的 Web 运用程序由 PHP 供应支持。
类似地,SQL 也是如此。
PHP 5.5 版本之前,我们有用于访问 MySQL 数据库的 mysql_ 命令,但由于安全性不敷,它们终极被弃用。

phppdo手册PHP PDO 简略教程 Node.js

弃用这件事是发生在 2013 年的 PHP 5.5 上,我写这篇文章的韶光是 2018 年,PHP 版本为 7.2。
mysql_ 的弃用带来了访问数据库的两种紧张方法:mysqli 和 PDO 库。

虽然 mysqli 库是官方指定的,但由于 mysqli 只能支持 mysql 数据库,而 PDO 可以支持 12 种不同类型的数据库驱动程序,因此 PDO 得到了更多的赞誉。
此外,PDO 还有其它一些特性,使其成为大多数开拓职员的更好选择。
你可以不才表中看到一些特性比较:

PDOMySQLi数据库支持12 种驱动只有 MySQL范例OOP过程 + OOP预处理语句(客户端侧)YesNo1命名参数YesNo

现在我想对付大多数开拓职员来说,PDO 是首选的缘故原由已经很清楚了。
以是让我们深入研究它,并希望在本文中只管即便涵盖关于 PDO 你须要的理解的。

连接

第一步是连接到数据库,由于 PDO 是完备面向工具的,以是我们将利用 PDO 类的实例。

我们要做的第一件事是定义主机、数据库名称、用户名、密码和数据库字符集。

$host = 'localhost';$db = 'theitstuff';$user = 'root';$pass = 'root';$charset = 'utf8mb4';$dsn = \公众mysql:host=$host;dbname=$db;charset=$charset\"大众;$conn = new PDO($dsn, $user, $pass);

之后,正如你在上面的代码中看到的,我们创建了 DSN 变量,DSN 变量只是一个保存数据库信息的变量。
对付一些在外部做事器上运行 MySQL 的人,你还可以通过供应一个 port=$port_number 来调度端口号。

末了,你可以创建一个 PDO 类的实例,我利用了 $conn 变量,并供应了 $dsn、$user、$pass 参数。
如果你遵照这些步骤,你现在该当有一个名为 $conn 的工具,它是 PDO 连接类的一个实例。
现在是时候进入数据库并运行一些查询。

一个大略的 SQL 查询

现在让我们运行一个大略的 SQL 查询。

$tis = $conn->query('SELECT name, age FROM students');while ($row = $tis->fetch()){ echo $row['name'].\"大众\t\公众; echo $row['age']; echo \"大众<br>\"大众;}

这是利用 PDO 运行查询的最大略形式。
我们首先创建了一个名为 tis(TheITStuff 的缩写 )的变量,然后你可以看到我们利用了创建的 $conn 工具中的查询函数。

然后我们运行一个 while 循环并创建了一个 $row 变量来从 $tis 工具中获取内容,末了通过调用列名来显示每一行。

很大略,不是吗?现在让我们来看看预处理语句。

预处理语句

预处理语句是人们开始利用 PDO 的紧张缘故原由之一,由于它供应了可以阻挡 SQL 注入的语句。

有两种基本方法可供给用,你可以利用位置参数或命名参数。

位置参数

让我们看一个利用位置参数的查询示例。

$tis = $conn->prepare(\"大众INSERT INTO STUDENTS(name, age) values(?, ?)\"大众);$tis->bindValue(1,'mike');$tis->bindValue(2,22);$tis->execute();

在上面的例子中,我们放置了两个问号,然后利用 bindValue() 函数将值映射到查询中。
这些值绑定到语句问号中的位置。

我还可以利用变量而不是直接供应值,通过利用 bindParam() 函数相同例子如下:

$name='Rishabh'; $age=20;$tis = $conn->prepare(\"大众INSERT INTO STUDENTS(name, age) values(?, ?)\"大众);$tis->bindParam(1,$name);$tis->bindParam(2,$age);$tis->execute();命名参数

命名参数也是预处理语句,它将值/变量映射到查询中的命名位置。
由于没有位置绑定,因此在多次利用相同变量的查询中非常有效。

$name='Rishabh'; $age=20;$tis = $conn->prepare(\公众INSERT INTO STUDENTS(name, age) values(:name, :age)\公众);$tis->bindParam(':name', $name);$tis->bindParam(':age', $age);$tis->execute();

你可以把稳到,唯一的变革是我利用 :name 和 :age 作为占位符,然后将变量映射到它们。
冒号在参数之前利用,让 PDO 知道该位置是一个变量,这非常主要。

你也可以类似地利用 bindValue() 来利用命名参数直接映射值。

获取数据

PDO 在获取数据时非常丰富,它实际上供应了许多格式来从数据库中获取数据。

你可以利用 PDO::FETCH_ASSOC 来获取关联数组,PDO::FETCH_NUM 来获取数字数组,利用 PDO::FETCH_OBJ 来获取工具数组。

$tis = $conn->prepare(\"大众SELECT FROM STUDENTS\公众);$tis->execute();$result = $tis->fetchAll(PDO::FETCH_ASSOC);

你可以看到我利用了 fetchAll,由于我想要所有匹配的记录。
如果只须要一行,你可以大略地利用 fetch。

现在我们已经获取了数据,现在是时候循环它了,这非常大略。

foreach ($result as $lnu){ echo $lnu['name']; echo $lnu['age'].\"大众<br>\公众;}

你可以看到,由于我要求了关联数组,以是我正在按名称访问各个成员。

虽然在定义希望如何传输递数据方面没有哀求,但在定义 $conn 变量本身时,实际上可以将其设置为默认值。

你须要做的便是创建一个 $options 数组,你可以在个中放入所有默认配置,只需在 $conn 变量中通报数组即可。

$options = [ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,];$conn = new PDO($dsn, $user, $pass, $options);

这是一个非常简短和快速的 PDO 先容,我们很快就会制作一个高等教程。
如果你在理解本教程的任何部分时碰着任何困难,请在评论部分见告我,我会在那你为你解答。

via: http://www.theitstuff.com/easiest-pdo-tutorial-basics

作者: Rishabh Kandari 选题: lujun9972 译者: MjSeven 校正: wxy

本文由 LCTT 原创编译, Linux中国 名誉推出

点击“理解更多”可访问文内链接