gpt4 book ai didi

php - 是否可以将 PDO 参数绑定(bind)到对象的成员变量?

转载 作者:行者123 更新时间:2023-12-02 05:19:43 26 4
gpt4 key购买 nike

使用 PDOStatement::bindParam() ,可以将参数绑定(bind)到变量——这在准备好的语句被多次执行时特别有用,每次执行都有不同的参数值。例如:

$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. 是否可以将参数绑定(bind)到对象的成员变量?例如:

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

    $obj->qux = 123;

    $obj = new stdClass();
    $obj->qux = 456;

    $qry->execute(); // which value is used for qux ?
  3. 在哪里记录了这种行为(如果有的话)?

最佳答案

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

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

我希望我说得够清楚了。

关于php - 是否可以将 PDO 参数绑定(bind)到对象的成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14077724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com