PDOStatement::bindParam()
和PDOStatement::bindValue()
什么PDOStatement::bindValue()
? php
这是我能够考虑的一些事项: 数据库
bindParam
,您只能传递变量; 没有价值 bindValue
,您能够同时传递(值,显然和变量) bindParam
只适用于变量,由于它容许参数经过“引用”做为输入/输出给定(而且在PHP中,值不是有效的“引用”) :它对于(引用手册的)驱动程序颇有用: 支持调用存储过程,该存储过程将数据做为输出参数返回,有些还做为输入/输出参数发送数据并进行更新以接收数据。 spa
对于某些数据库引擎,存储过程能够具备既可用于输入(将PHP的值提供给过程的值)又可用于输出(将值从存储的proc返回至PHP)的参数; 要绑定这些参数,您必须使用bindParam,而不是bindValue。 .net
答案在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'
对于最多见的目的,您应该使用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
使用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();
最简单地将其视为行为记忆的方式(就PHP而言):
bindParam:
参考 bindValue:
变量