lon*_*day 664

手册输入PDOStatement::bindParam:

[With bindParam]与此不同PDOStatement::bindValue(),变量被绑定为引用,并且仅在PDOStatement::execute()被调用时进行求值.

所以,例如:

$sex = 'male';
$s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
$s->bindParam(':sex', $sex); // use bindParam to bind the variable
$sex = 'female';
$s->execute(); // executed with WHERE sex = 'female'
Run Code Online (Sandbox Code Playgroud)

要么

$sex = 'male';
$s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
$s->bindValue(':sex', $sex); // use bindValue to bind the variable's value
$sex = 'female';
$s->execute(); // executed with WHERE sex = 'male'
Run Code Online (Sandbox Code Playgroud)

  • @Coldblackice如果您使用不同的数据多次执行查询.使用`bindValue`,您每次都需要重新绑定数据.使用`bindParam`,您只需更新变量即可.使用`bindValue`的主要原因是静态数据,例如文字字符串或数字. (29认同)
  • 太棒了,谢谢!问题 - 为什么你想要使用一个而不是另一个?就像什么时候只在execute()时评估bind参数一样有用或必要? (8认同)
  • 本来想投票,但是因为是666,所以就放弃了 (6认同)
  • 例如,您想要将 bindValue 与函数返回值一起使用: $stmt->bindValue(':status', strtolower($status), PDO::PARAM_STR); (2认同)

Pas*_*TIN 217

以下是我可以考虑的一些内容:

  • 有了bindParam,你只能传递变量; 不是价值观
  • bindValue,你可以传递两个(值,显然,和变量)
  • bindParam仅适用于变量,因为它允许参数作为输入/输出,通过"引用" (并且值在PHP中不是有效的"引用"):它对于驱动程序(引用手册)很有用:

支持调用返回数据作为输出参数的存储过程,还有一些也作为输入/输出参数,它们都发送数据并更新以接收数据.

对于某些数据库引擎,存储过程可以具有可用于输入的参数(从PHP向过程提供值)和输出(从存储过程返回值到PHP); 要绑定这些参数,您必须使用bindParam,而不是bindValue.

  • 我仍然不知道这到底意味着什么,变量到底是什么以及值是什么。我使用bindParam 将值绑定到占位符,并且使用bindValue 我可以做同样的事情!- 至少在我的例子中...... (2认同)

acr*_*man 179

答案在文档中bindParam:

与PDOStatement :: bindValue()不同,该变量被绑定为引用,并且仅在调用PDOStatement :: execute()时进行求值.

execute

调用PDOStatement :: bindParam()将PHP变量绑定到参数标记:绑定变量将其值作为输入传递,并接收其相关参数标记的输出值(如果有)


Nez*_*dle 27

准备好的语句和存储过程

用于bindParam通过一次时间绑定插入多行:

<?php

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)


Den*_*aia 26

为了最常见的目的,你应该使用bindValue.

bindParam 有两个棘手或意外的行为:

  • bindParam(':foo', 4, PDO::PARAM_INT) 不起作用,因为它需要传递一个变量(作为参考).
  • bindParam(':foo', $value, PDO::PARAM_INT)$value在运行后更改为字符串execute().当然,这可能导致可能难以捕获的细微错误.

资料来源:http://php.net/manual/en/pdostatement.bindparam.php#94711


tfo*_*ont 5

通过行为来记忆的最简单方法(就 PHP 而言):

  • bindParam: 参考
  • bindValue: 多变的