PDOStatement::bindParam的参数分析

2013.03.19

首先在PDOStatement::bindParam的参数中存在一个陷阱,先看这个函数参数。

PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed$driver_options ]]] )more

大家可以注意到,第二个参数前面有个“&”,这个是引用符号,通过这个方法穿进去的值会是引用的。通常我们会使用foreach进行数组遍历绑定,一不小心就错了,详情就参见 PDOStatement::bindParam的一个陷阱这篇文章。

就在前几天,看公司代码中用的PDO和错误例子很像!但是却一直能执行

foreach ($para as $key => $value) {

    $stat->bindParam(':' . $key, trim($value));

}

$stat->execute();

明明第二个参数是引用的,这样循环下去按道理来说应该绑定的是全部为最后一个值。但是这个却能正常使用。

后来仔细观察,原来第二个参数上有个trim,这个函数将$value给去空格之后,返回一个可以说是匿名的变量,存在了内存的一个新的地址中,而不是原来的$value。所以每次绑定都是正确的。

不过还是建议以后绑定用数组的时候第二个参数使用$para[$key],这样就可以避免错误了。

Comments
Write a Comment