egg*_*yal 2 php oop pdo prepared-statement pdostatement
使用时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
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
是否可以将参数绑定到对象的成员变量?例如:
$qry->bindParam(1, $obj->qux, PDO::PARAM_INT);
Run Code Online (Sandbox Code Playgroud)如果是这样,对象的成员变量是这样的参数绑定:在bindParam()调用时引用的那个,还是在语句执行时引用的那个?例如:
$obj->qux = 123;
$obj = new stdClass();
$obj->qux = 456;
$qry->execute(); // which value is used for qux ?
Run Code Online (Sandbox Code Playgroud)这种行为记录在哪里(如果有的话)?
PHP存储变量的引用以使用它.当您调用时$qry->bindParam(1, $obj->qux, PDO::PARAM_INT),存储的引用是instanciated类的成员的引用.
更改成员时$obj->qux,引用仍然与存储在引用中的引用相同$obj.但是,如果您重新注册$obj到新类,则每个引用都会更改,但您的旧对象仍在内存中!因此,当您为new分配新值时$obj->qux,它与使用的变量不同,因此运行$qry->execute将使用旧值.
我希望我已经足够清楚了.