我正在尝试解决一个问题,我需要在do while循环中对数据库执行查询并继续添加到结果集。然而,一旦它完成所有查询运行,然后我开始处理结果集php给出错误
警告:mysql_fetch_array()期望参数1是资源,
中给出的字符串
这个想法是它执行一个限制为0.2的查询,然后再次以2.2的限制执行,依此类推,直到返回的行数为空。我知道最好的解决方案是进行计数并从那里开始计算,但由于数据库太大,这不是一个选项。
以下是我目前的代码
$tempResult = "";
$i = 0;
$result = null;
do
{
if (is_resource($tempResult))
{
echo 'Cleared Result <br />';
mysql_free_result($tempResult);
}
echo 'Count: ' . $i . '<br />';
$query = "select * from table_test LIMIT $i, 2";
$tempResult = mysql_query($query) or die ("MySQL Error: " . mysql_error());
echo 'Temp Result: ' . $tempResult .' <br />';
$i = $i + 2;
$result .= $tempResult;
} while (mysql_num_rows($tempResult) > 0);
while ($myrow = mysql_fetch_array($result))
{
echo $myrow['col1'] . ' + ' . $myrow['col2'] .
' + ' . $myrow['col3'] . ' <br />';
}
感谢您提供的任何帮助。
答案 0 :(得分:0)
为什么不使用结果数组?例如:
$tempResult = "";
$i = 0;
$resultArray = array();
$result = null;
do
{
if (is_resource($tempResult))
{
echo 'Cleared Result <br />';
mysql_free_result($tempResult);
}
echo 'Count: ' . $i . '<br />';
$query = "select * from table_test LIMIT $i, 2";
$tempResult = mysql_query($query) or die ("MySQL Error: " . mysql_error());
$resultArray = merge($resultArray, mysql_fetch_array($tempResult));
echo 'Temp Result: ' . $tempResult .' <br />';
$i = $i + 2;
} while (mysql_num_rows($tempResult) > 0);
while ($resultArray as $myRow)
{
echo $myrow['col1'] . ' + ' . $myrow['col2'] .
' + ' . $myrow['col3'] . ' <br />';
}
答案 1 :(得分:0)
嗯,从这样一个不寻常的问题我们只能猜出正确答案。
我的赌注:
您的目标是对表中存储的数据进行一些计算
您将在PHP脚本中执行此操作,而不是使用数据库工具进行计算的正确方法
因此,最好在一个查询中进行所有计算。
反正
询问核心问题是一个根本问题,而不是与您选择解决它的一些不寻常方式相关的问题,这总是一个好习惯。
一旦你问这个,你将获得完整和专业的答案。
答案 2 :(得分:0)
为什么不在第一个循环中打印结果?
$i = 0;
do
{
$query = "SELECT * FROM table_test LIMIT $i, 2";
$result = mysql_query($query) or die("MySQL Error: " . mysql_error());
while ($myrow = mysql_fetch_array($result))
{
echo $myrow['col1'] . ' + ' . $myrow['col2'] . ' + ' . $myrow['col3'] . ' <br />';
}
$i = $i + mysql_affected_rows();
} while (mysql_affected_rows() > 1);
echo 'Count: ' . $i . '<br />';
但实际上,这种方法似乎是一种增加额外开销以从数据库中获取行的方法。