发现PHP查询MYSQL,遍历结果,会出现2倍数据(数据库1行数据2列,遍历输出4列)
软件版本如下:php5.4,mysql5.1,apache2.2.个人感觉不是软件版本问题。数据表t如下IDNAME1abc2def以下附上代码<?phpheader("...
软件版本如下:php5.4,mysql5.1,apache2.2. 个人感觉不是软件版本问题。
数据表t如下
ID NAME
1 abc
2 def
以下附上代码
<?php
header("Content-type: text/html; charset=utf-8");
$connect = mysql_connect('127.0.0.1:3306', 'root', '123456');
mysql_query("SET NAMES 'UTF8'");
$db = mysql_select_db('bk', $connect);
$res = mysql_query('select * from t', $connect);
$line = mysql_fetch_array($res);
var_dump($line);
echo '<br/><br/><br/><br/>';
echo '<table border="1"><tr><td>ID</td><td>NAME</td></tr>';
do{
echo '<tr>';
while(list($n,$v)=each($line)){
//if(preg_match("/^\d/i", $n)) //把这行注释去掉,则页面按原意输出
echo "<td>$v</td>";
}
echo '</tr>';
}while($line=mysql_fetch_array($res));
echo '</table>';
?>
最后附上图片
用$line['id']这样没问题
但是遍历都会出现我说的那个问题
var_dump()很明显已经输出一行数据4列数据 展开
数据表t如下
ID NAME
1 abc
2 def
以下附上代码
<?php
header("Content-type: text/html; charset=utf-8");
$connect = mysql_connect('127.0.0.1:3306', 'root', '123456');
mysql_query("SET NAMES 'UTF8'");
$db = mysql_select_db('bk', $connect);
$res = mysql_query('select * from t', $connect);
$line = mysql_fetch_array($res);
var_dump($line);
echo '<br/><br/><br/><br/>';
echo '<table border="1"><tr><td>ID</td><td>NAME</td></tr>';
do{
echo '<tr>';
while(list($n,$v)=each($line)){
//if(preg_match("/^\d/i", $n)) //把这行注释去掉,则页面按原意输出
echo "<td>$v</td>";
}
echo '</tr>';
}while($line=mysql_fetch_array($res));
echo '</table>';
?>
最后附上图片
用$line['id']这样没问题
但是遍历都会出现我说的那个问题
var_dump()很明显已经输出一行数据4列数据 展开
4个回答
展开全部
问题出在mysql_fetch_array这一步,此方法的第二个参数表示你要获取的数组的类型
MYSQL_ASSOC 关联数组,就是键名是id,name的
MYSQL_NUM 索引数组,键名是数字的
MYSQL_BOTH 以上两种都有
不给第二个参数的话,默认是MYSQL_BOTH,所以就出现了你上面的结果
MYSQL_ASSOC 关联数组,就是键名是id,name的
MYSQL_NUM 索引数组,键名是数字的
MYSQL_BOTH 以上两种都有
不给第二个参数的话,默认是MYSQL_BOTH,所以就出现了你上面的结果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
mysqli_fetch_all($res)解决
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是你用的函数问题换成mysql_fetch_assoc试一下! mysql_fetch_array是已关联索引数组取出!换了百分之百行
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题问得挺好,我也遇到了同样的问题。但我是双层循环订单信息(订单表和订单详情表有关联),然后最外层循环mysql语句套用了select from 订单表 join 订单详情表 on语句,出现了双倍的数据。
原来$ssq="SELECT * FROM orders AS o JOIN orderdetails as ods ON o.order_number=ods.order_number Where o.userid=$u";
改为$ssq="SELECT * FROM orders AS o Where o.userid=$u";
while ($row = mysqli_fetch_assoc($result)){
?>
<tr class="results">
<td valign="top" width="10%"><?php echo $row['order_number'];?></td>
你的不是双循环,奇怪了。
反正去掉了join on,数据库是一条记录,页面显示也是一条记录了(原来是显示两条记录),你将多余的东西用引号注释掉,排查排查,或者换一种思路。
原来$ssq="SELECT * FROM orders AS o JOIN orderdetails as ods ON o.order_number=ods.order_number Where o.userid=$u";
改为$ssq="SELECT * FROM orders AS o Where o.userid=$u";
while ($row = mysqli_fetch_assoc($result)){
?>
<tr class="results">
<td valign="top" width="10%"><?php echo $row['order_number'];?></td>
你的不是双循环,奇怪了。
反正去掉了join on,数据库是一条记录,页面显示也是一条记录了(原来是显示两条记录),你将多余的东西用引号注释掉,排查排查,或者换一种思路。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询