每http://php.net/manual/en/pdo.prepared-statements.php在函数或方法中使用
查询只需要被解析(或制备的)一次时,但也可以是 执行多次使用相同的或不同的参数从PDO准备声明受益。当 准备好查询时,数据库将分析,编译并优化其执行查询的计划。对于复杂的查询,如果需要用不同的 参数多次重复相同的查询,则该过程可能会花费足够的时间,以致明显地减慢应用程序的速度 。通过使用准备好的语句,该应用程序避免了重复分析/编译/优化循环的 。这意味着准备好的 语句使用更少的资源,从而运行得更快。
因此,下面将与更好的性能使用预处理语句时,受益:
<?php
...
$stmt=$conn->prepare('SELECT a FROM mytable WHERE x=?'); //I often use globals or similar for $conn
foreach($array as $id){
$stmt->execute(array($id));
$data=$stmt->fetchAll(PDO::FETCH_COLUMN);
...
}
...
?>
为了消除重复的代码,我希望在一个函数来执行查询。
在这种情况下,我如何从预先准备好的陈述的改进表现中受益?
请注意以下代码没有提供效率优势,实际上比首先使用预准备语句慢。
<?php
function getStuff($x)
{
...
$stmt=$conn->prepare('SELECT a FROM mytable WHERE x=?');
$stmt->execute(array($x));
$data=$stmt->fetchAll(PDO::FETCH_COLUMN);
...
return $data;
};
...
foreach($array as $x){
$data=getStuff($x);
...
}
...
?>
让两个功能,一是准备,一个用于执行。在你的情况下,你每次都准备相同的查询,这不会提高性能。 – Bv202
在您的方案中,您根本没有任何收益。您准备/执行您的查询,然后THROW AWAY让您可以重新使用查询的语句句柄。 –
Bv202和Marc。同意我的第二个方案没有任何好处,只有我的第一个。我如何在第二种情况下受益? – user1032531