db2_fetch_assoc() は、特定の場所から呼び出されたときに次の行を見つけられません - レコードセットにさらに行があります。
goQueryDB2() はデータベースに接続し、クエリを実行します。db2_fetch_assoc() を使用してレコードセットの最初の行を返し、外部関数 getNextRowDB2() を呼び出すことでレコードセットの 2 番目の行を返すことができます (これは同じことを行います)。
レコードセット リソースは、その関数 ($result) から返されます。ただし、getNextRowDB2() が $result をパラメーターとして指定して再度呼び出されると、レコードセットの 3 番目の行は返されません。実際、何も見つからず、警告がスローされます (警告: db2_fetch_assoc() [function.db2- fetch-assoc]: フェッチ失敗)。
"No results found in Resource 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