方法 bindParam() 和 bindValue() 非常相似。
唯一的区别就是前者使用一个PHP变量绑定参数,而后者使用一个值。
所以使用bindParam是第二个参数只能用变量名,而不能用变量值,而bindValue至可以使用具体值。
01 | $stm = $pdo ->prepare( "select * from users where user = :user" ); |
02 | $user = "jack" ; |
03 | //正确 |
04 | $stm ->bindParam( ":user" , $user ); |
05 | //错误 |
06 | //$stm->bindParam(":user","jack"); |
07 | //正确 |
08 | $stm ->bindValue( ":user" , $user ); |
09 | //正确 |
10 | $stm ->bindValue( ":user" , "jack" ); |
另外在存储过程中,bindParam可以绑定为input/output变量,如下面:
1 | $stm = $pdo ->prepare( "call func(:param1)" ); |
2 | $param1 = "abcd" ; |
3 | $stm ->bindParam( ":param1" , $param1 ); //正确 |
4 | $stm ->execute(); |
存储过程执行过后的结果可以直接反应到变量上。
对于那些内存中的大数据块参数,处于性能的考虑,应优先使用前者。