PDO 的查询与执行
他们是否都做同样的事情,只是不同?
除了使用之间有什么区别吗?prepare
$sth = $db->query("SELECT * FROM table");
$result = $sth->fetchAll();
和
$sth = $db->prepare("SELECT * FROM table");
$sth->execute();
$result = $sth->fetchAll();
?
他们是否都做同样的事情,只是不同?
除了使用之间有什么区别吗?prepare
$sth = $db->query("SELECT * FROM table");
$result = $sth->fetchAll();
和
$sth = $db->prepare("SELECT * FROM table");
$sth->execute();
$result = $sth->fetchAll();
?
查询
运行不带参数化数据的标准 SQL 语句。
execute
运行一个预准备语句,该语句允许您绑定参数以避免转义或引用参数的需要。 如果您多次重复查询,也会表现得更好。预准备语句示例:execute
$sth = $dbh->prepare('SELECT name, colour, calories FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories);
$sth->bindParam(':colour', $colour);
$sth->execute();
// $calories or $color do not need to be escaped or quoted since the
// data is separated from the query
最佳做法是坚持使用预准备语句并执行
以提高安全性。
不,它们不一样。除了在客户端提供转义之外,准备的语句在服务器端编译一次,然后在每次执行时可以传递不同的参数。这意味着您可以执行以下操作:
$sth = $db->prepare("SELECT * FROM table WHERE foo = ?");
$sth->execute(array(1));
$results = $sth->fetchAll(PDO::FETCH_ASSOC);
$sth->execute(array(2));
$results = $sth->fetchAll(PDO::FETCH_ASSOC);
它们通常会为您提供性能改进,尽管在小规模上并不明显。阅读有关预准备语句(MySQL 版本)的更多信息。