Php 如何对mysql结果进行两次检查?

Php 如何对mysql结果进行两次检查?,php,mysql,Php,Mysql,无论出于什么原因,我都需要对mysql结果集进行两次检查。有办法吗? 我不想运行两次查询,也不想重写脚本,使其将行存储在某个位置,然后在以后重用它们。尝试是否执行您需要的操作 mysql_data_seek()移动内部 MySQL结果的行指针 与指定的结果关联 标识符,指向指定的 行数。对MySQL的下一次调用 获取函数,例如 mysql_fetch_assoc(),将返回 划船 行编号从0开始。行号 应为介于0和0之间的值 到mysql_num_rows()-1。然而如果 结果集为空 (mys

无论出于什么原因,我都需要对mysql结果集进行两次检查。有办法吗? 我不想运行两次查询,也不想重写脚本,使其将行存储在某个位置,然后在以后重用它们。

尝试是否执行您需要的操作

mysql_data_seek()移动内部 MySQL结果的行指针 与指定的结果关联 标识符,指向指定的 行数。对MySQL的下一次调用 获取函数,例如 mysql_fetch_assoc(),将返回 划船

行编号从0开始。行号 应为介于0和0之间的值 到mysql_num_rows()-1。然而如果 结果集为空 (mysql_num_rows()==0),查找0 将以E_警告和 mysql_data_seek()将返回FALSE


这就是你可以做到的:

$result = mysql_query(/* Your query */);
while($row = mysql_fetch_assoc($result)){
 // do whatever here...
}

// set the pointer back to the beginning
mysql_data_seek($result, 0);
while($row = mysql_fetch_assoc($result)){
 // do whatever here...
}

然而,我不得不说,这似乎不是正确的处理方法。为什么不在第一个循环中进行处理?

您可以使用将内部指针移动到数据集的开头。然后,您可以再次迭代。

我承认我没有尝试过这个,但您在第一次迭代后尝试过吗

mysql_data_seek($queryresult,0);

要转到第一条记录?

好的,您可以随时计算读取的行数,然后执行以下操作:

if (rownumber == mysql_num_rows($result)) { mysql_data_seek($result, 0); }

不知道为什么需要这样做,但确实如此。

数据搜索的替代方法是将值存储到数组中:

$arrayVals = array();
$result = mysql_query(/* Your query */);
while($row = mysql_fetch_assoc($result)){
    $arrayVals[] = $row;
}

// Now loop over the array twice instead

$len = count($arrayVals);
for($x = 0; $x < $len; $x++) {
    $row = $arrayVals[$x];

    // Do something here    
}

$len = count($arrayVals);
for($x = 0; $x < $len; $x++) {
    $row = $arrayVals[$x];

    // Do something else here   
}
$arrayVals=array();
$result=mysql_query(/*您的查询*/);
while($row=mysql\u fetch\u assoc($result)){
$arrayVals[]=$row;
}
//现在改为在阵列上循环两次
$len=计数($arrayVals);
对于($x=0;$x<$len;$x++){
$row=$arrayVals[$x];
//在这里做点什么
}
$len=计数($arrayVals);
对于($x=0;$x<$len;$x++){
$row=$arrayVals[$x];
//在这里做点别的
}
因为您应该执行以下操作:

$result= $con->query($sql); // $con is the connection object
$result->data_seek(0); 

为什么mysql_fetch_assoc()?我可以使用mysql\u fetch\u array()@A-OK:回答你的问题,是的,你可以使用
mysql\u fetch\u array()
。你似乎对“按自己的方式”做事有一种特殊的爱好。我用
mysql\u fetch\u assoc()
进行了演示,因为它只会将结果提取到一个关联数组中,而不会同时提取一个整数索引数组和关联数组,这就是
mysql\u fetch\u array()
所做的。@A-OK:好的,那么,这个解决方案会用一些更糟糕的编码风格来掩盖你糟糕的编码风格,而不是一开始就鼓励你重写代码。如果您需要一个快速的,这个就可以了,但我建议您最好在为时已晚之前重写这在PHP5.5.0中被弃用,在PHP7.0中被删除。改为使用
mysqli\u data\u seek
;如果您使用的是prepared语句:),请尝试此函数重置指针。使用哪个MySQL库?您通常可以在resultset中倒带内部指针。我编写了一个助手函数,称为multiRow(),它可以完成所有这些操作,只返回和数组行。