PDO
是“PHP 数据对象”。我主要使用PDO,所以我只能谈谈它的优点:
- 适用于更多的数据库,而不仅仅是MySQL(对你来说可能无关紧要)
- 编译C,所以它更快(据说)
- 预准备的语句(尽管其他人有这些)
- SO似乎喜欢它,所以你至少可以在这里得到很多帮助
- 您可以动态设置和更改的各种提取/错误处理模式
你问
那么PDO,预准备语句和MySQLi之间有什么区别?
PDO
并且是数据库包装器。“预准备语句”是一个完全不同的概念。您可以准备一个可以多次执行的查询,并且正确参数化的语句是SQL注入安全的(尽管可能不是证明)。后一个原因是您应该使用PDO(或MySQLi)的大部分原因,但准备好的语句也为查询带来了一定程度的清晰度。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.
你可以用 做基本上相同的事情,但我更喜欢 的语法。它可能也更快,但我可能正在弥补这一点。还有很少被提及的PEAR,我相信还有更多。由于是内置的,我会去的。MySQLi
PDO
MDB2
PDO