Php 如何使用mysqli_fetch_array()两次?
我使用db的条目来填充表中的行和列。但是我不能使用Php 如何使用mysqli_fetch_array()两次?,php,sql,mysqli,mysqli-fetch-array,Php,Sql,Mysqli,Mysqli Fetch Array,我使用db的条目来填充表中的行和列。但是我不能使用mysqli\u fetch\u array()两次访问SQL返回的数据。这不起作用: //Copy the result $db_res = mysqli_query( $db_link, $sql ); $db_res2=$db_res; //Top row while ($row = mysqli_fetch_array( $db_res, MYSQL_ASSOC)) { echo "<td>". $row['
mysqli\u fetch\u array()
两次访问SQL返回的数据。这不起作用:
//Copy the result
$db_res = mysqli_query( $db_link, $sql );
$db_res2=$db_res;
//Top row
while ($row = mysqli_fetch_array( $db_res, MYSQL_ASSOC))
{
echo "<td>". $row['Title'] . "</td>";
}
//leftmost column
while ($row = mysqli_fetch_array( $db_res2, MYSQL_ASSOC))
{
echo "<tr>";
echo "<td>". $row['Title'] . "</td>";
.....
echo "</tr>";
}
//复制结果
$db\u res=mysqli\u查询($db\u link,$sql);
$db_res2=$db_res;
//第一排
而($row=mysqli\u fetch\u数组($db\u res,MYSQL\u ASSOC))
{
回显“$row['Title']”;
}
//最左列
而($row=mysqli\u fetch\u数组($db\u res2,MYSQL\u ASSOC))
{
回声“;
回显“$row['Title']”;
.....
回声“;
}
如何对同一个结果应用两次mysqli\u fetch\u数组?是
mysqli\u fetch\u array()
每次调用指针时都会向前移动指针。您需要将指针设置回起始位置,然后再次调用mysqli\u fetch\u array()
因此,在第二次调用函数之前,请执行以下操作:
mysqli_data_seek($db_res, 0);
您应该始终将数据操作与输出分开 首先选择您的数据:
$db_res = mysqli_query( $db_link, $sql );
$data = array();
while ($row = mysqli_fetch_assoc($db_res))
{
$data[] = $row;
}
//Top row
foreach ($data as $row)
{
echo "<td>". $row['Title'] . "</td>";
}
//leftmost column
foreach ($data as $row)
{
echo "<tr>";
echo "<td>". $row['Title'] . "</td>";
.....
echo "</tr>";
}
请注意,由于PHP 5.3,您可以使用fetch_all()
而不是显式循环:
$db_res = mysqli_query( $db_link, $sql );
$data = $db_res->fetch_all(MYSQLI_ASSOC);
然后尽可能多地使用它:
$db_res = mysqli_query( $db_link, $sql );
$data = array();
while ($row = mysqli_fetch_assoc($db_res))
{
$data[] = $row;
}
//Top row
foreach ($data as $row)
{
echo "<td>". $row['Title'] . "</td>";
}
//leftmost column
foreach ($data as $row)
{
echo "<tr>";
echo "<td>". $row['Title'] . "</td>";
.....
echo "</tr>";
}
//顶行
foreach($行数据)
{
回显“$row['Title']”;
}
//最左列
foreach($行数据)
{
回声“;
回显“$row['Title']”;
.....
回声“;
}
试试看……您不需要
while
循环,也不需要使用mysqli\u fetch\u array()
您只需在mysqli\u结果
对象本身上循环多次即可
//Top row
foreach($db_res as $row) {
echo "<td>". $row['Title'] . "</td>";
}
//leftmost column
foreach($db_res as $row) {
echo "<tr>";
echo "<td>". $row['Title'] . "</td>";
.....
echo "</tr>";
}
//顶行
foreach($db_res作为$row){
回显“$row['Title']”;
}
//最左列
foreach($db_res作为$row){
回声“;
回显“$row['Title']”;
.....
回声“;
}
但是,您应该将DB逻辑与显示逻辑分开,为了实现这一点,最好在DB逻辑中使用
fetch\u all(MYSQLI\u ASSOC)
将所有记录检索到一个数组中 是的。我问了同样的问题,并使用了mysqli_data_seek($db_res,0)代码>在两个mysqli_fetch_row()之间代码>while循环和第二个while循环的工作原理与第一个相同。嗯。我很肯定我的答案是正确的。忽略-1,user2212461。给出-1的人可能会留下评论并告诉他为什么放置-1。当你调用mysqli\u data\u seek($db\u res,0)时,答案可能有问题代码>同时仍然循环遍历结果。然后它将“永远”运行。@powtac他们没有把这个放在循环中,而是放在它之后。你救了我!我甚至不知道那一行代码………只要不使用mysqli\u free\u result()
,这个解决方案就会使查询使用的内存增加一倍。