2012-05-25 74 views
0

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 
+0

你怎么知道还有另一行?您在我看到的任何地方都没有调用db2_num_rows($ result)... –

+0

根据我发布的内容,这是一个公平的评论,但我通过直接通过CLI查询确认了大约2,500行。此外,如果我在主函数“$ row = getNextRowDB2($ result); if if(sizeof($ row)> 0)echo”

  • getNextRow()在结果集中返回记录(资源ID: “。$ result。”)有“。sizeof($ row)。”字段
  • “; }”它继续显示第三,第四条记录......等 – Dan

    回答

    0

    我能够通过使用持久连接来解决:

    $con = db2_pconnect("MASTER", "USER", "PASSWORD") 
    

    我认为即使资源的名称(“资源ID#12”)从该函数(DB2连接a)传回nd所有返回的资源在它们被调用的函数的末尾停止存在 - 除非使用持续连接。

    这对于DB2来说是独一无二的,因为我发现持久连接在MySQL中不是必需的。

    相关问题