使用PDOStatement::bindParam()
,可以将参数绑定到变量 - 这在多次执行预准备语句时尤其有用,每个语句具有不同的参数值。例如:
$dbh = new PDO('mysql:dbname=foo', 'eggyal', 'password1');
$qry = $dbh->prepare('DELETE FROM bar WHERE qux = ?');
$qry->bindParam(1, $qux, PDO::PARAM_INT);
while (true) {
$qux = ... ;
$qry->execute();
// etc
}
我的问题是:
是否可以将参数绑定到对象的成员变量?例如:
$qry->bindParam(1, $obj->qux, PDO::PARAM_INT);
如果是这样,对象的成员变量是这样一个参数绑定:bindParam()
调用时引用的那个,或引用的那个在声明执行?例如:
$obj->qux = 123;
$obj = new stdClass();
$obj->qux = 456;
$qry->execute(); // which value is used for qux ?
记录此行为的位置(如果有的话)?
答案 0 :(得分:5)
PHP存储变量的引用以使用它。当您调用$qry->bindParam(1, $obj->qux, PDO::PARAM_INT)
时,存储的引用是instanciated类成员的引用。
当您更改成员$obj->qux
时,引用仍然与$obj
中存储的引用相同。但是,如果将$obj
重新定位到新类,则每个引用都会更改,但旧对象仍在内存中!因此,当您为新$obj->qux
分配新值时,它与使用的变量不同,因此运行$qry->execute
将使用旧值。
我希望我已经足够清楚了。