bindParam和bindValue有什么区别?

PDOStatement::bindParam()PDOStatement::bindValue()什么PDOStatement::bindValue()php


#1楼

这是我能够考虑的一些事项: 数据库

  • 使用bindParam ,您只能传递变量; 没有价值
  • 使用bindValue ,您能够同时传递(值,显然和变量)
  • bindParam只适用于变量,由于它容许参数经过“引用”做为输入/输出给定(而且在PHP中,值不是有效的“引用”) :它对于(引用手册的)驱动程序颇有用:

支持调用存储过程,该存储过程将数据做为输出参数返回,有些还做为输入/输出参数发送数据并进行更新以接收数据。 spa

对于某些数据库引擎,存储过程能够具备既可用于输入(将PHP的值提供给过程的值)又可用于输出(将值从存储的proc返回至PHP)的参数; 要绑定这些参数,您必须使用bindParam,而不是bindValue。 .net


#2楼

答案在bindParam的文档中: code

与PDOStatement :: bindValue()不一样,该变量被绑定为引用,而且仅在调用PDOStatement :: execute()时进行评估。 pdo

execute 文档

调用PDOStatement :: bindParam()将PHP变量绑定到参数标记:绑定变量将其值做为输入传递,并接收其关联参数标记的输出值(若是有) 字符串

例: get

$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'

要么 it

$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'

#3楼

对于最多见的目的,您应该使用bindValue

bindParam具备两种棘手或意外的行为:

  • bindParam(':foo', 4, PDO::PARAM_INT)不起做用,由于它须要传递一个变量(做为参考)。
  • 在运行execute()以后bindParam(':foo', $value, PDO::PARAM_INT)会将$value更改$value字符串。 固然,这会致使可能难以捕获的细微错误。

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


#4楼

准备好的语句和存储过程

使用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();

#5楼

最简单地将其视为行为记忆的方式(就PHP而言):

  • bindParam: 参考
  • bindValue: 变量
相关文章
相关标签/搜索