详解PHP PDO简单教程
大约80%的Web应用程序由PHP提供支持。类似地,SQL也是如此。PHP5.5版本之前,我们有用于访问MySQL数据库的mysql_命令,但由于安全性不足,它们最终被弃用。
弃用这件事是发生在2013年的PHP5.5上,我写这篇文章的时间是2018年,PHP版本为7.2。mysql_的弃用带来了访问数据库的两种主要方法:mysqli和PDO库。
虽然mysqli库是官方指定的,但由于mysqli只能支持mysql数据库,而PDO可以支持12种不同类型的数据库驱动程序,因此PDO获得了更多的赞誉。此外,PDO还有其它一些特性,使其成为大多数开发人员的更好选择。你可以在下表中看到一些特性比较:
PDO
MySQLi
数据库支持
12种驱动
只有MySQL
范例
OOP
过程+OOP
预处理语句(客户端侧)
Yes
No
1命名参数
Yes
No
现在我想对于大多数开发人员来说,PDO是首选的原因已经很清楚了。所以让我们深入研究它,并希望在本文中尽量涵盖关于PDO你需要的了解的。
连接
第一步是连接到数据库,由于PDO是完全面向对象的,所以我们将使用PDO类的实例。
我们要做的第一件事是定义主机、数据库名称、用户名、密码和数据库字符集。
$host='localhost'; $db='theitstuff'; $user='root'; $pass='root'; $charset='utf8mb4'; $dsn="mysql:host=$host;dbname=$db;charset=$charset"; $conn=newPDO($dsn,$user,$pass);
之后,正如你在上面的代码中看到的,我们创建了DSN变量,DSN变量只是一个保存数据库信息的变量。对于一些在外部服务器上运行MySQL的人,你还可以通过提供一个port=$port_number来调整端口号。
最后,你可以创建一个PDO类的实例,我使用了$conn变量,并提供了$dsn、$user、$pass参数。如果你遵循这些步骤,你现在应该有一个名为$conn的对象,它是PDO连接类的一个实例。现在是时候进入数据库并运行一些查询。
一个简单的SQL查询
现在让我们运行一个简单的SQL查询。
$tis=$conn->query('SELECTname,ageFROMstudents'); while($row=$tis->fetch()) { echo$row['name']."\t"; echo$row['age']; echo"
"; }
这是使用PDO运行查询的最简单形式。我们首先创建了一个名为tis(TheITStuff的缩写)的变量,然后你可以看到我们使用了创建的$conn对象中的查询函数。
然后我们运行一个while循环并创建了一个$row变量来从$tis对象中获取内容,最后通过调用列名来显示每一行。
很简单,不是吗?现在让我们来看看预处理语句。
预处理语句
预处理语句是人们开始使用PDO的主要原因之一,因为它提供了可以阻止SQL注入的语句。
有两种基本方法可供使用,你可以使用位置参数或命名参数。
位置参数
让我们看一个使用位置参数的查询示例。
$tis=$conn->prepare("INSERTINTOSTUDENTS(name,age)values(?,?)"); $tis->bindValue(1,'mike'); $tis->bindValue(2,22); $tis->execute();
在上面的例子中,我们放置了两个问号,然后使用bindValue()函数将值映射到查询中。这些值绑定到语句问号中的位置。
我还可以使用变量而不是直接提供值,通过使用bindParam()函数相同例子如下:
$name='Rishabh';$age=20; $tis=$conn->prepare("INSERTINTOSTUDENTS(name,age)values(?,?)"); $tis->bindParam(1,$name); $tis->bindParam(2,$age); $tis->execute();
命名参数
命名参数也是预处理语句,它将值/变量映射到查询中的命名位置。由于没有位置绑定,因此在多次使用相同变量的查询中非常有效。
$name='Rishabh';$age=20; $tis=$conn->prepare("INSERTINTOSTUDENTS(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*FROMSTUDENTS"); $tis->execute(); $result=$tis->fetchAll(PDO::FETCH_ASSOC);
你可以看到我使用了fetchAll,因为我想要所有匹配的记录。如果只需要一行,你可以简单地使用fetch。
现在我们已经获取了数据,现在是时候循环它了,这非常简单。
foreach($resultas$lnu){ echo$lnu['name']; echo$lnu['age']."
"; }
你可以看到,因为我请求了关联数组,所以我正在按名称访问各个成员。
虽然在定义希望如何传输递数据方面没有要求,但在定义$conn变量本身时,实际上可以将其设置为默认值。
你需要做的就是创建一个$options数组,你可以在其中放入所有默认配置,只需在$conn变量中传递数组即可。
$options=[ PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC, ]; $conn=newPDO($dsn,$user,$pass,$options);
这是一个非常简短和快速的PDO介绍,我们很快就会制作一个高级教程。如果你在理解本教程的任何部分时遇到任何困难,请在评论部分告诉我,我会在那你为你解答。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。