Каково различие между bindParam и bindValue?

Для базового форматирования:

var template = jQuery.validator.format("{0} is not a valid value");
var result = template("abc");
366
задан Adrian Cid Almaguer 12 March 2015 в 08:01
поделиться

2 ответа

Ответ находится в документации для bindParam :

В отличие от PDOStatement :: bindValue (), переменная привязана как ссылка и будет оцениваться только в то время, когда PDOStatement :: execute ( ) называется.

И выполнить

call PDOStatement :: bindParam () для привязки переменных PHP к маркерам параметров: связанные переменные передают свое значение в качестве входных и получают выходное значение, если оно есть, связанных с ними маркеров параметров

Пример:

$value = 'foo';
$s = $dbh->prepare('SELECT name FROM bar WHERE baz = :baz');
$s->bindParam(':baz', $value); // use bindParam to bind the variable
$value = 'foobarbaz';
$s->execute(); // executed with WHERE baz = 'foobarbaz'

или

$value = 'foo';
$s = $dbh->prepare('SELECT name FROM bar WHERE baz = :baz');
$s->bindValue(':baz', $value); // use bindValue to bind the variable's value
$value = 'foobarbaz';
$s->execute(); // executed with WHERE baz = 'foo'
179
ответ дан 23 November 2019 в 00:08
поделиться

Вот некоторые из них, о которых я могу подумать:

  • С помощью bindParam вы можете передавать только переменные; не значения
  • с bindValue , вы можете передавать оба (значения, очевидно, и переменные).
  • bindParam работает только с переменными, потому что он позволяет параметрам быть заданными как ввод / вывод, "ссылка" (и значение не является допустимой "ссылкой" в PHP) : полезно с драйверами, которые (цитируя руководство):

поддерживают вызов сохраненных процедуры, которые возвращают данные в качестве вывода параметры, а некоторые также как параметры ввода / вывода, которые оба отправляют в данных и обновляются для их получения.

В некоторых механизмах БД хранимые процедуры могут иметь параметры, которые могут использоваться как для ввода (передача значения из PHP процедуре), так и для вывода (возвращение значения из хранимой процедуры в PHP); чтобы связать эти параметры, вы должны использовать bindParam, а не bindValue.

217
ответ дан 23 November 2019 в 00:08
поделиться
Другие вопросы по тегам:

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