0

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
4

1 に答える 1

0

永続的な接続を使用して解決できました:

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

リソースの名前 ("Resource id #12") が関数から返されたとしても、永続的な接続でない限り、DB2 接続と返されたすべてのリソースは、それらが呼び出された関数の最後に存在しなくなると思います。使用されている。

これは DB2 に固有のもので、MySQL でこれを実現するために永続的な接続は必要ないことがわかりました。

于 2012-05-25T02:11:31.383 に答える