我有两个递归函数:
1)
function getCategories($id)
{
global $con;
$select = $con->prepare('SELECT * FROM categories WHERE parent_category_id = :parent_category_id OR (parent_category_id IS NULL AND :parent_category_id IS NULL)');
$select->bindValue(':parent_category_id', $id, PDO::PARAM_NULL || PDO::PARAM_INT);
$select->execute();
// fetching.........
for() ... getCategories(.......);
}
2)
$select = $con->prepare('SELECT * FROM categories WHERE parent_category_id = :parent_category_id OR (parent_category_id IS NULL AND :parent_category_id IS NULL)');
function getCategories($id)
{
global $select;
$select->bindValue(':parent_category_id', $id, PDO::PARAM_NULL || PDO::PARAM_INT);
$select->execute();
// fetching.........
for() ... getCategories(.......);
}
哪个更好/更快? 是否最好只提前一次提出这一规定?
答案 0 :(得分:1)
第二个应该更快,因为你没有调用不需要的语句。准备好的陈述的想法是你必须准备一次。但最好的方法是剖析。
这是一个简单的方法:
$start = microtime(true);
for ($i = 0; $i < 1000000; $i++){
//your code here
}
echo microtime(true) - $start;
答案 1 :(得分:0)
你的第二个功能肯定要快得多,特别是当它经常执行时。因为这是发明预准备语句的主要原因:您的SQL服务器只需解析和优化您的查询一次。但在你的第一个解决方案中,你甚至不需要准备好的陈述。因此,在我看来,仅需要进行性能分析测试才能找出第二个更快,而不是发现它更快。
答案 2 :(得分:0)
第二个变体更快,因为您准备“模板”(使用prepare()
方法),然后您将值发送到模板并在每次迭代中执行查询。