lon*_*day 664
[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)
Pas*_*TIN 217
以下是我可以考虑的一些内容:
bindParam,你只能传递变量; 不是价值观bindValue,你可以传递两个(值,显然,和变量)bindParam仅适用于变量,因为它允许参数作为输入/输出,通过"引用" (并且值在PHP中不是有效的"引用"):它对于驱动程序(引用手册)很有用:支持调用返回数据作为输出参数的存储过程,还有一些也作为输入/输出参数,它们都发送数据并更新以接收数据.
对于某些数据库引擎,存储过程可以具有可用于输入的参数(从PHP向过程提供值)和输出(从存储过程返回值到PHP); 要绑定这些参数,您必须使用bindParam,而不是bindValue.
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