PHP PDO和库MySQLi [复制]PHP PDO和库MySQLi [复制](PHP PDO a

2019-05-14 10:21发布

这个问题已经在这里有一个答案:

  • 库MySQLi或PDO -什么利弊? [关闭] 13个答案

我只是完成了PHP的入门课程,并在整个计算器论坛人都建议我改用PDO,预处理语句或mysqli的,我简要地检查了手册,但当中的大部分都在我头上。

我一直在使用mysql_ *函数到目前为止所以这些概念是新的我。 我认为,他们被用来访问和执行数据库的具体行动,但我不知道。

那么究竟是什么PDO,准备语句和库MySQLi的区别,它们有什么不同的功能,完成相同的任务? 他们是在脚本兼容,或者是它“选择一个或其他”? 而最后它提供了最佳的性能?

更新:谢谢你的答案,我会打猎更PDO教程。

仅供参考我还发现以下职位有用:

哪一个是快,重量轻-库MySQLi或PDO

库MySQLi或PDO -什么利弊?

Answer 1:

在基层的mysql,mysqli的和PDO扩展名的所有回答我怎么跟数据库的问题 它们都提供功能和功能连接到数据库,并从它发送和检索数据。 您可以同时建立多个连接到数据库的同时使用他们,但是这通常是无稽之谈。

MYSQL *是一个非常简单的扩展,基本上可以让你连接到数据库,发送SQL查询和其他人并不多。
mysqli的通过添加参数化查询和一些其他的东西混进去改进了这个(顾名思义)。
PDO是抽象的几个数据库驱动器集成到一个封装的延伸,也就是说,它可以让你使用相同的代码连接到MySQL,甲骨文,MS SQL Server和其他一些数据库,而不需要使用数据库特定的扩展或重新编写代码时你(至少在理论上)切换数据库。 它还支持参数化查询。

如果你知道你将要专门使用MySQL中,mysqli的是一个不错的选择。 特别是因为你可以在一个程序的方式使用它,你已经从mysql扩展使用到什么。 如果你不熟悉面向对象的,这是有帮助的。 否则,PDO是面向一个很好的对象,灵活的数据库连接器。


*注意MySQL扩展现在已经过时 ,将在未来某个时候删除 。 这是因为它是古老的,充满了糟糕的做法,缺乏一些现代特色。 不要用它来编写新的代码。



Answer 2:

PDO是“PHP数据对象”。 我主要使用PDO,所以我只能在它的优点发言:

  • 工作在很多超过数据库MySQL的只是(可能无所谓你)
  • 编译C,所以它的速度更快(据说)
  • 准备好的语句(别人有这些,虽然)
  • 如此看来喜欢它,所以你可以在这里至少可能会得到很多的帮助
  • 各种获取/错误处理模式,你可以设置和动态更改

你问

那么究竟是什么PDO,准备语句和库MySQLi之间的区别...

PDOMySQLi是DB的包装。 “预处理语句”是不同的概念完全。 你可以准备一个可被执行多次的查询,并适当参数化的语句是SQL注入安全(尽管也许不是证明)。 后者的原因是大多数,为什么你应该使用PDO(或MySQLi的),但准备的语句也带来更为清晰的向查询的水平的原因。

/* mysql_* version */
mysql_connect("host");
$query = "SELECT column FROM db1.t1 WHERE id = ";
foreach ($_GET['id'] as $id) {
   $id = mysql_real_escape_string($id);
   $result = mysql_query($query . "'$id'";
   while ($row = mysql_fetch_assoc($result)) {
      echo "$row[column]\n";
   }
}
//NOTE: it would probably be better to store the resource returned by
//mysql_connect and use that consistently (in query/escape)

/* PDO version */
$pdo = new PDO('mysql:host=HOST', 'user', 'pass');
$query = $pdo->prepare("SELECT column FROM db1.t1 WHERE id = ?";
foreach ($_GET['id'] as $id) {
   $query->execute($id);
   echo $query->fetch(PDO::FETCH_COLUMN);
}
//Notice that you skip the escape step.

你可以用基本相同的MySQLi ,但我宁愿PDO的语法。 它可能会更快,但我却可以做这件事。 另外还有PEAR MDB2很少被所说的,我敢肯定,等等。 由于PDO是内置的,我会去用它。



Answer 3:

如果你使用的mysql_xxx功能,那么我会通过在该移动开始MySQLi扩展代替。

你可以使用PDO来代替,如果你愿意的话,但这只是真的是值得的第一个实例,如果你需要开始支持多个数据库。 你的目的,我建议切换到MySQLi的,因为这将是您更容易,你不会马上得到反正PDO的好处。

可用库MySQLi的功能非常类似于mysql_xx你习惯的功能; 它通常是可以利用现有的代码,做他们之间的直接交换,和代码应继续努力就好了。

所以这是一个良好的开端-使用让您的代码mysqli_xxx代替mysql_xxx`的。

如果可能的话,我建议你使用面向对象的语法,而不是程序的语法。 库MySQLi支持,以及程序的语法将接近你习惯什么,但OO语法是从长远来看更灵活了,真的是没有太大的不同,一旦你习惯了。

一旦你得到了你的代码转换为使用的MySQLi库,你是舒适的基础知识,你就可以开始使用像准备好的发言更先进的功能。 但是,让自己舒服的基础知识第一。



Answer 4:

从相同的角度来看,你来了。 从我的角度来看,我不认为差异是真正显着的(取决于你使用它的内容)。 它看起来像PDO是一个简单的数据库的API,合并所有其他数据库的API为一体。 所以,如果你需要连接到一个MS SQL Server和MySQL服务器,你可以简单地呼吁PDO API和指定的驱动程序特定的分贝。 我的猜测也是未来功能和能力在MySQL将只在PDO可用。 所以基本上只使用PDO,以确保您能够获得所有最新功能。



Answer 5:

PDO的一个大优势是平台独立性。 这意味着你可以迁移到在某一点不同的数据库管理系统,而无需重新编写所有的函数调用。 这是怎么会事通常是在Java中(通过JDBC),净(ADO)和大多数其他环境中完成的。 其优点是不仅是你可以切换DBMS本身,它也是你只有一个API来学习。

至于你的问题,在PDO层提供设施做准备的语句。 预处理语句背后的想法是,你创建的,不会直到运行时知道你的SQL语句的部分占位符。 许多学生通过创建SQL作为被调用的mysqli ::查询($ someQuery)执行的字符串开始。 这是有问题的原因有很多,其中最突出的是易受SQL注入(参见stackoverflow.com/questions/5315351了类似的问题和答案)。 随着PDO,你能避免SQL注入和所有的处理字符,如引号,反斜线等问题,最终的结果是,你的代码更安全,可读性和可预见性。

如果你已经想通了如何使用则mysqli的使用PDO是没有太大的不同。 链接的问题和答案以上示出了使用制备PDO应作为一个有用的导向作用语句被提交的查询的一个例子。



Answer 6:

那么究竟是什么PDO,准备语句和库MySQLi的区别,它们有什么不同的功能,完成相同的任务?

所不同的是相当简单的。
PDO是 预处理语句 使用和mysqli的不是

只要使用本地预处理语句运行既API一些常用的查询,你会清楚地看到差异。



文章来源: PHP PDO and MySQLi [duplicate]