0

PHPアプリをMySQLからDB2に変換していますが、IBM_DB2とMySQL PHP拡張機能の間で、理解または解決できない何かが異なるようです。

db2_fetch_array()返されたレコードセットがオブジェクトプロパティとして保存され、後で呼び出されたときにリソースID番号を返す場合でも、db2_connect()andを含む関数の外部で行を呼び出すと、レコードセットから行を返すことができないようです。db2_exec()

以下のメソッドの呼び出しがgetNextRow()レコードセットの次の行を返すことができない理由を誰かが理解できますか?これはMySQLで正常に機能しました。

class TestClass
{
//Properties
public $result; //Holds the record set returned from a query
public $sql; //Holds the value of the last sql query sent

    function goQuery($sql)
    {
        $this->sql = $sql;

        if($con = db2_connect("MASTER", "DB2USER", "DB2PASSWORD"))
        {
            echo "<li>Connected to master database</li>";   
        }

        if($this->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($this->result);
        if(sizeof($row) > 0)
        {
            echo "<li>db2_fetch_assoc returned a record in the resultset (Resource ID: " . $this->result . ") that has " . sizeof($row) . " fields</li>";   
        }

        //Just proving some data can be returned as this point
        $row = $this->getNextRow();
        if(sizeof($row) > 0)
        {
            echo "<li>getNextRow() returned a record in the resultset (Resource ID: " . $this->result . ") the has " . sizeof($row) . " fields</li>";   
        }
    }

    function getNextRow()
    {
        if($row = db2_fetch_assoc($this->result))
        {
            return $row;    
        }
            else
        {
            echo "<li>No results found in " . $this->result . "</li>";  
        }
    }
}

$q = new TestClass();

echo "<h2>Running query TestClass->goQuery()</h2>";
echo "<ul>";
$q->goQuery("SELECT * FROM users");
echo "</ul>";

echo "<h2>Trying to fetch a result using TestClass->getNextRow()</h2>";
echo "<ul>";
$row = $q->getNextRow();
echo "</ul>";

これにより、現在次の出力が生成されます。

Running query TestClass->goQuery()

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
Trying to fetch a result using TestClass->getNextRow()

No results found in Resource id #12
4

1 に答える 1

0

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

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

DB2 接続のように見え、永続的な接続が使用されていない限り、返されたすべてのリソースは、それらが呼び出された関数の最後に存在しなくなります。

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

于 2012-05-25T02:12:40.820 に答える