Можно ли привязать параметр PDO к переменной-члену объекта?
С помощью 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 ?
Где это поведение задокументировано (если вообще)?
1 ответ
PHP хранит ссылку на переменную, чтобы использовать ее. Когда вы звоните $qry->bindParam(1, $obj->qux, PDO::PARAM_INT)
сохраненная ссылка является ссылкой на член экземпляра класса.
Когда вы меняете члена $obj->qux
ссылка остается той же, что и в вашем $obj
, Однако, если вы реанимируете $obj
в новый класс, то все ссылки будут изменены, но ваш старый объект все еще находится в памяти! Поэтому, когда вы назначаете новое значение новому $obj->qux
, это не та же самая используемая переменная, поэтому работает $qry->execute
будет использовать старое значение.
Я надеюсь, что я достаточно ясно