【发布时间】:2012-08-16 18:17:44
【问题描述】:
我有两个递归函数:
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(.......);
}
哪个更好/更快? 只准备一次声明会更好吗?
【问题讨论】:
-
如何运行你的代码十万次迭代并找出哪个更快?
-
Is it better to preapre the statment one time only?- 你认为preparing语句的point究竟是什么? -
PARAM_NULL || PARAM_INT- 您确定要执行逻辑 OR,而不是按位 OR (|)。此外,使用全局变量是自找麻烦。 -
@Crozin 你在那里绝对正确,但 FTR
PDO::PARAM_NULL || PDO::PARAM_INT == PDO::PARAM_NULL | PDO::PARAM_INT == 1 == PDO::PARAM_INT- 所以它仍然可以按预期工作,但这只是因为它是那个特定的组合。任何其他组合都会有效地导致PDO::PARAM_INT(我假设它将被强制转换为整数)编辑实际上考虑一下,bindValue()甚至不接受一点面具 - 如果这样做就没有任何意义。
标签: php mysql pdo prepared-statement