php数据分析报告 php数据查询

PHP PDOStatement:bindParam插入数据错误问题分析废话不多说,
直接看代码:
复制代码
代码如下:
?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");
但是,
可惜的是,
你错了,
最终执行的SQL是:
INSERT
INTO
`user`
(`username`,
`password`)
VALUES
("weibo",
"weibo");
是不是很大的一个坑呢?
这个问题,
来自今天的一个Bug报告:
#63281
究其原因,
也就是bindParam和bindValue的不同之处,
bindParam要求第二个参数是一个引用变量(reference).
让我们把上面的代码的foreach拆开,
也就是这个foreach:
复制代码
代码如下:
?php
foreach(
$bind_params
as
$key
=
$value
){
$statement-bindParam($key,
$value);
}
相当于:
复制代码
代码如下:
?php
//第一次循环
$value
=
$bind_params[":username"];
$statement-bindParam(":username",
$value);
//此时,
:username是对$value变量的引用
//第二次循环
$value
=
【php数据分析报告 php数据查询】$bind_params[":password"];
//oops!
$value被覆盖成了:password的值
$statement-bindParam(":password",
$value);
所以,
在使用bindParam的时候,
尤其要注意和foreach联合使用的这个陷阱.
那么正确的作法呢?
1.
不要使用foreach,
而是手动赋值
复制代码
代码如下:
?php
$statement-bindParam(":username",
$bind_params[":username"]);
//$value是引用变量了
$statement-bindParam(":password",
$bind_params[":password"]);
2.
使用bindValue代替bindParam,
或者直接在execute中传递整个参数数组.
3.
使用foreach和reference(不推荐)
复制代码
代码如下:
?php
foreach(
$bind_params
as
$key
=
$value
)
{
//注意这里
$statement-bindParam($key,
$value);
}
最后,
展开了说,
对于要求参数是引用,
并且有滞后处理的函数,
都要在使用foreach的时候,
谨慎!
php数据分析这个问题其实简单,你可以在foreach外先设置一个空数组,作用是把2016-11-29作为键 出现的次数作为value存储起来,代码
$tmpArr = array();
foreach($ips as $key = $value)
{
$tmpArr[explode('_',$key)[0]] ++;
}
foreach($tmpArr as $key = $tmp)
{
echo $key." ".$tmp."br";
}
但是具体的数据结构要根据你自己情况来定 。
php是怎样实现淘宝卖家平台中,数据的分析的呢?这个 可以通过jquery 插件进行绘图 。
这个是我找到的一个、
现在中文解释比较多了、
你百度搜索一下 jquery 折线图,好多好多 。。而且都是能用 的、、

推荐阅读