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

时间:2013-09-03 18:15:02

标签: php mysql prepared-statement

在很多场合,我使用的是超过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?

这是良好的做法还是不良做法?

2 个答案:

答案 0 :(得分:3)

是的,重用变量是可以的,甚至是很好的练习。

除此之外,您是否认为一次又一次地使用所有这些代码是非常重复的?如何使用功能来制作像

这样的东西
$row = function('SELECT ...', $params);
list($a, $b, $c) = function('SELECT ...', $another);

答案 1 :(得分:0)

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