我总是对我的PDO查询语句使用相同的变量,例如:
// Query 1
$stmt = $db->prepare("UPDATE table_1 SET name=? WHERE somthing=?");
$stmt->bindValue(1, $name, PDO::PARAM_STR);
$stmt->bindValue(2, $something, PDO::PARAM_STR);
$stmt->execute();
// Query 2 (right after the above)
$stmt = $db->prepare("UPDATE table_2 SET another_column=? WHERE id=?");
$stmt->bindValue(1, $another_column, PDO::PARAM_STR);
$stmt->bindValue(2, $id, PDO::PARAM_INT);
$stmt->execute();
我知道第一行($stmt = $db->...)
是可以的,我怀疑是绑定值。例如,如果我忘记在第一个查询中绑定某些内容,我的查询将在第二个查询中使用下一个绑定(反之亦然)?或者在execute()
之后重置所有内容?
哪一个是更好的做法?
答案 0 :(得分:3)
使用不同的变量可以更容易地进行调试,但是我偶尔会这样做,因为它更容易输入提示单个语句。
我怀疑是有约束力的价值观。
每个db->prepare()
都会返回一个全新的\PDOStatement
,因此没有关于绑定值的问题。
答案 1 :(得分:1)
在这种情况下,在同一范围内使用不同的语句,我为语句选择更具体的名称。
因此,在您的情况下,我会将它们命名为$stmtUpdTable1
和$stmtUpdTable2
或其他内容。
因为我无法评论其他答案:我认为没有必要取消设置不再使用的变量,垃圾收集器将完成他的工作。无需使代码混乱
答案 2 :(得分:0)
我希望在每次查询后取消设置$stmt
。所以我不必担心你上面提到的所有事情。
// Query 1
$stmt = $db->prepare("UPDATE table_1 SET name=? WHERE somthing=?");
$stmt->bindValue(1, $name, PDO::PARAM_STR);
$stmt->bindValue(2, $something, PDO::PARAM_STR);
$stmt->execute();
unset($stmt);
// Query 2 (right after the above)
$stmt = $db->prepare("UPDATE table_2 SET another_column=? WHERE id=?");
$stmt->bindValue(1, $another_column, PDO::PARAM_STR);
$stmt->bindValue(2, $id, PDO::PARAM_INT);
$stmt->execute();
这也是取消设置不再需要的变量的好习惯。