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

时间:2012-12-29 00:59:08

标签: 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
}

我的问题是:

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

    $qry->bindParam(1, $obj->qux, PDO::PARAM_INT);
    
  2. 如果是这样,对象的成员变量是这样一个参数绑定:bindParam()调用时引用的那个,或引用的那个在声明执行?例如:

    $obj->qux = 123;
    
    $obj = new stdClass();
    $obj->qux = 456;
    
    $qry->execute();  // which value is used for qux ?
    
  3. 记录此行为的位置(如果有的话)?

1 个答案:

答案 0 :(得分:5)

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

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

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