PDOStatement::bindParam()和PDOStatement::bindValue()之间的区别是什么?
当前回答
最简单的方法是通过行为来进行记忆(在PHP中):
bindParam:参考 bindValue:变量
其他回答
对于最常见的目的,应该使用bindValue。
bindParam有两个棘手的或意想不到的行为:
bindParam(':foo', 4, PDO::PARAM_INT)不起作用,因为它需要传递一个变量(作为引用)。 bindParam(':foo', $value, PDO::PARAM_INT)将在运行execute()后将$value更改为字符串。当然,这可能会导致难以捕捉的微妙错误。
来源:http://php.net/manual/en/pdostatement.bindparam.php # 94711
你再也不用挣扎了,只要有这样一条路:
$stmt = $pdo->prepare("SELECT * FROM someTable WHERE col = :val");
$stmt->execute([":val" => $bind]);
从PDOStatement::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'
or
$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'
最简单的方法是通过行为来进行记忆(在PHP中):
bindParam:参考 bindValue:变量
答案在bindParam的文档中:
与PDOStatement::bindValue()不同的是,该变量被绑定为引用,并且仅在调用PDOStatement::execute()时被计算。
和执行
调用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'
or
$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'
推荐文章
- PHP子字符串提取。获取第一个'/'之前的字符串或整个字符串
- __construct函数的作用是什么?
- PHP中的异步shell执行器
- Laravel 5 -如何访问在视图存储上传的图像?
- 为什么在PHP中使用sprintf函数?
- “质量分配”在Laravel中是什么意思?
- 在逗号上爆炸字符串,并修剪每个值的潜在空格
- PHP与MySQL 8.0+错误:服务器请求身份验证方法未知的客户端
- laravel5“LIKE”对等物(雄辩的)
- 在函数中使用默认实参
- 转换php数组到Javascript
- PHP PDO:字符集,集名称?
- PHP函数生成slug (URL字符串)
- GCM与PHP(谷歌云消息传递)
- 如何在Symfony 2中获得请求参数?