是否可以始终对PDO查询使用相同的变量(例如$ stmt)?

时间:2015-06-03 17:09:00

标签: php pdo

我总是对我的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()之后重置所有内容?

哪一个是更好的做法?

  1. 使用相同的变量来避免错误(例如Always $ stmt)
  2. 使用不同的变量

3 个答案:

答案 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();

这也是取消设置不再需要的变量的好习惯。