PHP PDO bindParam 和 bindValue 有什么区别

bindParam 和 bindValue

bindValue()

  • 与 PDOStatement::bindValue() 不同,该变量被绑定为引用,并且只会在调用 PDOStatement::execute() 时进行评估。

bindParam()

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

PHP PDOStatement:bindParam 与 bindValue

  • 这是一个重复执行查询的普通地方,每次迭代使用不同的参数。
  • 但是,使用传统的 query() 方法和循环机制会带来开销,因为为了有效性和编码方便而重复解析或多或少相同的查询,并且需要使用新的重复重新配置查询每次迭代的值。
  • 使用准备好的语句消除了这个问题。使用 PDOStatement 类在 PHP 中很容易完成。
  • bindValue 和 bindParam PDOStatement 方法都用于将变量绑定到参数(在 SQL 语句中使用名称或问号占位符)。
  • 将参数专门绑定到指定的变量名 bindParam。
  • 绑定为引用,而绑定一个可能是变量的值,bindValue。
  • 参数的整数或字符串。

为了使区别更清楚,我们可以查看代码示例:

  • 两者都将变量绑定到占位符的参数。
  • bindParambindValue中,变量可以绑定到参数。
php代码
< ?php
$name = 'collins';
$sql = 'INSERT INTO feeds (name) VALUES (:name)';
$update = $conn -> prepare($sql);
$update -> bindParam(':name', $name);
$update -> execute();
php代码
< ?php
$name = 'collins';
$sql = 'INSERT INTO feeds (name) VALUES (:name)';
$update = $conn -> prepare($sql);
$update -> bindValue(':name', $name);
$update -> execute();
  • bindParam将变量绑定为引用。
  • 例如,当一个变量被分配为对另一个变量的引用时,分配为引用的变量值的变化也会影响父变量。
  • 为了创建引用,使用&

例子

javascript代码

$a = 'good boy';
$b = &$a;  // $a and $b both equal "good boy"
$b = "bad boy"; // $a and $b both equal "bad boy"
echo "$a"; // echos "bad boy"
  • 在检查bindParam描述时,您可以看到该方法的第二个参数接受一个作为引用传递的变量,并且只会在调用 execute() 时进行评估。

因此,即使在 bindParam() 方法被调用后,我们仍然可以更改绑定到参数的变量的值,如下所示:

javascript代码
$name = 'collins';
$sql = 'INSERT INTO feeds (name) VALUES (:name)';
$update = $conn -> prepare($sql);
$update -> bindParam(':name', $name);
$name = 'john';
$update -> execute(); // execute with john inserted into the column "name"
  • 上面的代码会将 'john' 绑定到 :name 参数,因为正如我们所提到的,在使用 bindParam 时,变量是通过引用绑定的。
  • “bindValue”接受不同的数据类型。
  • 与仅将变量名绑定到参数的 bindParam() 不同,使用 bindValue,您可以绑定变量以及整数、浮点数和字符串。

通过“bindValue”将整数绑定到参数。

php代码
< ?php
$sql = 'INSERT INTO feeds (numbers) VALUES (:number)';
$update = $conn -> prepare($sql);
$update -> bindValue(':number', 100);
$update -> execute();

通过“ bindValue ”将字符串绑定到参数

php代码
< ?php
$sql = 'INSERT INTO feeds (names) VALUES (:name)';
$update = $conn -> prepare($sql);
$update -> bindValue(':name', 'collins');
$update -> execute();
  • 当您尝试使用 bindParam 将字符串或数字(浮点数/整数)绑定到参数时,您将收到此错误:

“致命错误:无法通过引用传递参数 2”

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值