PHP PDOStatement:bindParam插入数据错误问题分析
PHP PDOStatement:bindParam插入数据错误问题分析,开发中一定要注意
废话不多说,直接看代码:
<div class="codetitle"><a style="CURSOR: pointer" data="99033" class="copybut" id="copybut99033" onclick="doCopy('code99033')"> 代码如下:
<div class="codebody" id="code99033">
<?PHP
$dbh = new PDO('MysqL:host=localhost;dbname=test',"test");$query = <<<QUERY
INSERT INTO
user
(
username
,
password
) VALUES (:username,:password);
QUERY;
$statement = $dbh->prepare($query);$bind_params = array(':username' => "laruence",':password' => "weibo");
foreach( $bind_params as $key => $value ){
$statement->bindParam($key,$value);
}
$statement->execute();
请问,最终执行的sql语句是什么,上面的代码是否有什么问题?
Okey,我想大部分同学会认为,最终执行的sql是:
INSERT INTO
user
(
username
,
password
) VALUES ("laruence","weibo");
但是,可惜的是,你错了,
password
) VALUES ("weibo","weibo");
是不是很大的一个坑呢?
这个问题,来自今天的一个Bug报告: #63281
究其原因,也就是bindParam和bindValue的不同之处,bindParam要求第二个参数是一个引用变量(reference).
让我们把上面的代码的foreach拆开,也就是这个foreach:
<div class="codetitle">
<a style="CURSOR: pointer" data="90747" class="copybut" id="copybut90747" onclick="doCopy('code90747')"> 代码如下: <div class="codebody" id="code90747">