PHPPDOStatement误差分析:bindparam插入数据
复制代码代码如下所示:
< PHP
$胸径=新PDO('mysql:主机为localhost;北京测试,测试);
查询= <查询>
插入到用户(用户名,密码,密码)值(用户名,密码);
查询;
语句=准备($查询);
bind_params美元=阵列(用户名= >laruence :密码= >微博);
foreach(bind_params美元美元美元关键=值){
声明-> bindparam美元(美元,美元的价值);
}
语句>执行();
请问SQL语句的最后执行情况是什么,上面的代码有什么问题
好吧,我想大多数的学生认为SQL最终执行:
插入`用户`(`用户名密码`,` `)值(laruence
但不幸的是,您错了,SQL的最终执行是:
插入到用户(用户名,密码,密码)值中
它是一个大坑吗
这个问题源于今天的一个bug报告:# 63281
这是bindparam与bindValue之间的差异,并bindparam要求第二参数是一个引用变量(参考)。
让我们将上面代码中的每个,这是每一个:
复制代码代码如下所示:
< PHP
foreach(bind_params美元美元美元关键=值){
声明-> bindparam美元(美元,美元的价值);
}
量:
复制代码代码如下所示:
< PHP
第一循环
bind_params美元美元价值= {:用户名};
$声明-> bindparam(用户名
第二个循环
bind_params美元美元价值= {:密码}; / /哎呀!包含$值:密码值
$声明-> bindparam(:口令
因此,使用bindparam时,尤其要注意陷阱,Foreach共同使用。
1。不要使用foreach,但手动分配
复制代码代码如下所示:
< PHP
$声明-> bindparam(:用户名
$声明-> bindparam(:口令
2。用bindparam bindValue,或通过参数整个阵列直接执行。
三.使用foreach和参考(不推荐)
复制代码代码如下所示:
< PHP
foreach(bind_params美元美元美元关键=值){ / /注意这里
声明-> bindparam美元(美元,美元的价值);
}
最后,这是说,对于需要参数被引用和滞后的处理功能,使用时要小心,foreach。