是否可以将PDO参数绑定到对象的成员变量?

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)

我的问题是:

  1. 是否可以将参数绑定到对象的成员变量?例如:

    $qry->bindParam(1, $obj->qux, PDO::PARAM_INT);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果是这样,对象的成员变量是这样的参数绑定:在bindParam()调用时引用的那个,还是在语句执行时引用的那个?例如:

    $obj->qux = 123;
    
    $obj = new stdClass();
    $obj->qux = 456;
    
    $qry->execute();  // which value is used for qux ?
    
    Run Code Online (Sandbox Code Playgroud)
  3. 这种行为记录在哪里(如果有的话)?

Tho*_*uiz 5

PHP存储变量的引用以使用它.当您调用时$qry->bindParam(1, $obj->qux, PDO::PARAM_INT),存储的引用是instanciated类的成员的引用.

更改成员时$obj->qux,引用仍然与存储在引用中的引用相同$obj.但是,如果您重新注册$obj到新类,则每个引用都会更改,但您的旧对象仍在内存中!因此,当您为new分配新值时$obj->qux,它与使用的变量不同,因此运行$qry->execute将使用旧值.

我希望我已经足够清楚了.