PDO
是“PHP 数据对象”。我主要使用PDO,所以我只能说它的优点:
- 适用于更多的数据库,而不仅仅是 MySQL(对你来说可能无关紧要)
- 编译C,所以它更快(据说)
- 准备好的陈述(虽然其他人有这些)
- SO似乎很喜欢,所以你至少可以在这里得到很多帮助
- 您可以即时设置和更改各种获取/错误处理模式
你问
那么 PDO、prepared statements 和 MySQLi 有什么区别...
PDO
并且MySQLi
是数据库包装器。“准备好的陈述”是一个完全不同的概念。您可以准备一个可以多次执行的查询,并且正确参数化的语句是 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
's 语法。它也可能更快,但我可以弥补。还有MDB2
很少被提及的 PEAR,我敢肯定还有更多。既然PDO
是内置的,我会去的。