db2_fetch_assoc()在从某些位置调用时未找到下一行 - 即使记录集中有更多行。即使存在下一行,db2_fetch_assoc()也不会返回下一行
goQueryDB2()连接到数据库并运行查询。它能够通过调用外部函数getNextRowDB2()(它做同样的事情),使用db2_fetch_assoc()和记录集中的第二行返回记录集中的第一行。
记录集资源从该函数返回($ result)。然而,当getNextRowDB2()再次以$ result作为参数提供时被调用时,记录集中的第三行不会被返回 - 事实上它找不到任何内容并引发警告(Warning:db2_fetch_assoc()[function.db2- fetch-assoc]:提取失败)。
您可以从“在资源ID#12中找不到结果”的输出中看到资源的名称已有效地传递给getNextRowDB2()函数 - 但由于某种原因,它不再在该记录集中找到任何行。
谁能告诉我发生了什么事?或者甚至确认你是否同意这段代码看起来不错?
有没有让DB2记录集资源在调用它的函数之外无法访问的问题?
这在MySQL中运行正常(我必须转换为DB2)。
所以这个代码:
function goQueryDB2($sql)
{
if($con = db2_connect("MASTER", "USER", "PASSWORD"))
{
echo "<li>Connected to master database</li>";
}
if($result = db2_exec($con, $sql))
{
echo "<li>SQL Query ran successfully</li>";
}
//Just proving some data can be returned as this point
$row = db2_fetch_assoc($result);
if(sizeof($row) > 0)
{
echo "<li>db2_fetch_assoc returned a record in the resultset (Resource ID: " . $result . ") that has " . sizeof($row) . " fields</li>";
}
//Just proving some data can be returned as this point
$row = getNextRowDB2($result);
if(sizeof($row) > 0)
{
echo "<li>getNextRow() returned a record in the resultset (Resource ID: " . $result . ") the has " . sizeof($row) . " fields</li>";
}
return $result;
}
function getNextRowDB2($result)
{
if($row = db2_fetch_assoc($result))
{
return $row;
}
else
{
echo "<li>No results found in " . $result . "</li>";
}
}
echo "<h2>goQueryDB2()</h2>";
$result = goQueryDB2("SELECT * FROM users");
echo "<h2>getNextRowDB2()</h2>";
$row = getNextRowDB2($result);
产生这样的输出:
goQueryDB2()
Connected to master database
SQL Query ran successfully
db2_fetch_assoc returned a record in the resultset (Resource ID: Resource id #12) that has 25 fields
getNextRow() returned a record in the resultset (Resource ID: Resource id #12) the has 25 fields
getNextRowDB2()
Warning: db2_fetch_assoc() [function.db2-fetch-assoc]: Fetch Failure in /home/portal/includes/functionsSecurity.php on line 262
No results found in Resource id #12
你怎么知道还有另一行?您在我看到的任何地方都没有调用db2_num_rows($ result)... –
根据我发布的内容,这是一个公平的评论,但我通过直接通过CLI查询确认了大约2,500行。此外,如果我在主函数“$ row = getNextRowDB2($ result); if if(sizeof($ row)> 0)echo”