Arris
@Arris
Сапиенсы учатся, играя.

PHP PDO bindParam, второй параметр передается по ссылке. Зачем?

В https://www.php.net/manual/ru/pdostatement.bindpar... указано:

public PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] ) : bool

что параметр $variable передается по ссылке.

Зачем так сделано?

Я понимаю, это имело бы смысл, если бы существовал какой-нибудь тип PDO::PARAM_CLOSURE, вызывающий коллбэк для привязки к параметру значения, позволяя его изменить "на лету". Но ничего подобного в документации я не вижу.

Чего я не замечаю?
  • Вопрос задан
  • 250 просмотров
Решения вопроса 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
Вопрос хороший, а ответ очень простой
Подготовленные выражения - это ведь подукция двойного назначения.
Они не только защищают от инъекций, но так же позволяют сэкономить несколько миллисекунд, если один и тот же запрос надо выполнить несколько раз с разными данными.

То есть по сути никакой PDO::PARAM_CLOSURE для того чтобы изменить данные на лету не нужен - ты тупо меняешь значение приязанной переменной. Именно благодаря передаче по ссылке.
$stmt = $pdo->prepare("SELECT ?");
$stmt->bindParam(1, $var);
$var = 1;
$var = 2; // меняем на лету
$stmt->execute();
$var = 3;
$stmt->execute();


Плюс, как правильно отмечают товарищи в комментах, иногда переменная служит для возвращения значения из хранимой процедуры. То есть после выполнения запроса в привязанной по ссылке переменной будет не исходное значение, а то, которое возвратила процедура
Ответ написан
DevMan
@DevMan
bindValue привязывает значение в момент своего вызова.
bindParam привязывает значение только в момент вызова execute.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы