我可以重用准备好的语句对象吗


Can I reuse the prepared statement object

在许多情况下,我使用了超过1个准备好的语句,比如

$conn = connect('read'); // connect to the database
$q = 'SELECT ...';
$stmt = $conn->prepare($q);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($a, $b, $c);
$stmt->free_result();
$stmt->close();

$q = 'SELECT ...';
$stmt2 = $conn->prepare($q);
$stmt2->execute();
$stmt2->store_result();
$stmt2->bind_result($a, $b, $c, $d, $e, $f...);
$stmt2->free_result();
$stmt2->close();

$conn->close(); // close db connection

有时,试图找出给stmt变量的数字只是一团糟。。。

一旦我使用stmt->close()关闭stmt对象,我可以反复使用它吗?这样我就不需要跟踪给变量stmt的索引了?

这是好做法还是坏做法?

是的,重用变量是可以的,甚至是一种很好的做法。

除此之外,你不认为一遍又一遍地使用所有这些代码是非常重复的吗?使用函数来制作之类的东西怎么样

$row = function('SELECT ...', $params);
list($a, $b, $c) = function('SELECT ...', $another);

我认为这应该是一个好主意,但就您可以控制代码块的执行而言,如果stmt->close()由于某些错误而无法到达,并且您启动了一个新的集合,会发生什么。如果你能处理好这类情况,这将是一个好主意。