gra*_*per 37 php mysql mysqli pdo
我刚刚完成了PHP的入门课程,并且在整个stackoverflow论坛中,人们建议我切换到PDO,准备好的语句或MYSQLi,我简要地检查了手册,但大部分都是我的头脑.
到目前为止我一直在使用mysql_*函数,所以这些概念对我来说都是新的.我认为他们习惯于访问和执行特定于数据库的操作,但我不确定.
那么PDO,预处理语句和MySQLi之间的区别是,它们是完成相同任务的不同功能吗?它们是在脚本中兼容还是"选择其中一种"?最后哪个提供最佳性能?
更新:感谢您的回答,我将寻找更多的PDO教程.
作为参考,我还发现以下帖子很有用:
dec*_*eze 39
在基本级别,mysql,mysqli和PDO扩展都回答了如何与数据库通信的问题?它们都提供连接数据库并从中发送和检索数据的功能和功能.您可以同时使用它们,同时建立与数据库的多个连接,但这通常是无稽之谈.
mysql*是一个非常简单的扩展,基本上允许你连接到数据库,发送它的SQL查询,而不是其他.
mysqli通过添加参数化查询和其他一些东西来改进这个(顾名思义).
PDO是一个扩展,它将几个数据库驱动程序抽象到一个包中,即它允许您使用相同的代码连接到MySQL,Oracle,MS SQL Server和许多其他数据库,而无需使用特定于数据库的扩展或重写代码时你切换数据库(理论上至少).它还支持参数化查询.
如果你知道你将独家使用MySQL,那么mysqli是一个不错的选择.特别是因为你可以以程序的方式使用它,你已经习惯了mysql扩展.如果您不熟悉OOP,那会很有帮助.否则,PDO是一个很好的面向对象,灵活的数据库连接器.
*请注意,mysql扩展现在已弃用,将来某个时候将被删除.那是因为它古老,充满了不良做法,缺乏一些现代特色.不要用它来编写新代码.
Exp*_*lls 16
PDO是"PHP数据对象".我主要使用PDO,所以我只能说它的优点:
你问
那么PDO,预处理语句和MySQLi之间有什么区别......
PDO并且MySQLi是DB包装器."准备好的陈述"完全是一个不同的概念.您可以准备一个可以多次执行的查询,并且正确参数化的语句是SQL-Injection安全的(尽管可能不是证明).后一个原因是您应该使用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.
Run Code Online (Sandbox Code Playgroud)
你可以用基本相同的MySQLi,但我更喜欢PDO的语法.它也可能更快,但我可以做到这一点.PEAR MDB2也很少被人提及,我相信还有更多.既然PDO是内置的,我会配合它.
| 归档时间: |
|
| 查看次数: |
24604 次 |
| 最近记录: |