|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2003-06-16 11:43 UTC] fretnoiz at yandex dot ru
Description:
------------
If I create two different objects for database access, one of them does not work.
For example, one DB object is connected to MySQL, second is connected to Interbase. Interbase does not return results properly.
Reproduce code:
---------------
define('DB_DSN1', 'mysql://max:max@localhost/autogarant');
define('DB_DSN2',
'ibase://SYSDBA:masterkey@localhost/C:\IB\autogarant');
$siteDB =& DB::connect(DB_DSN1);
$cisDB =& DB::connect(DB_DSN2);
$result1 =& $siteDB->query("SELECT NAME FROM kod");
if ($row = $result1->fetchRow(DB_FETCHMODE_ASSOC)) {
$code = $row['NAME'];
echo $code . "<br>\n";
$result2 =& $cisDB->query("SELECT NAME FROM kod WHERE NAME='$code'");
print_r($result2->fetchRow());
echo "<br>\n";
}
Expected result:
----------------
The tables in the DBs contain the same data so i expect to get equivalent records.
006.905
Array ( [0] => 006.905 )
Actual result:
--------------
006.905
Fatal error: Call to undefined function: fetchrow() in c:\Web\htdocs\test_pear.php on line 23
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 08:00:01 2025 UTC |
$result2 =& $cisDB->query("SELECT NAME FROM kod WHERE NAME='$code'"); print_r($result2->fetchRow()); "Fatal error: Call to undefined function: fetchrow() in c:\Web\htdocs\test_pear.php on line 23" The problem seems that you are not checking for errors. At the top of your code put the following lines: function pe($obj) { echo $obj->toString(); } PEAR::setErrorHandler(PEAR_ERROR_CALLBACK, 'pe'); and try again.Have you tried the code provided by Tomas ? Additionnally you can die on the error function pe($obj) { die($obj->toString()); } PEAR::setErrorHandler(PEAR_ERROR_CALLBACK, 'pe');So, if you do a PEAR::setErrorHandling(PEAR_ERROR_DIE); What does it give ? alternatively you can try the following $result2 =& $cisDB->query("SELECT NAME FROM kod WHERE NAME='$code'"); if (DB::isError($result2)) { die($result2->getErrorMessage() . ' ' . $result2->getUserinfo()); }BTW, not sure about that but try removing the reference PEAR::setErrorHandling(PEAR_ERROR_DIE); $result2 = $cisDB->query("SELECT NAME FROM kod WHERE NAME='$code'"); print_r($result2->fetchRow()); echo "<br>\n"; }If I do a PEAR::setErrorHandling(PEAR_ERROR_DIE); output is following --- 006.905 Warning: ibase_fetch_row(): supplied argument is not a valid InterBase result resource in c:\Web\htdocs\pear\DB\ibase.php on line 214 --- and testing $result2 for error gives nothing I've also noticed that if I remove WHERE clause i.e. $result2 =& $cisDB->query("SELECT NAME FROM kod"); the script works fine and I successfully get the first row from interbase table: 006.905 Array ( [0] => 006.905 ) But when I change connection order the error returns: $cisDB =& DB::connect(DB_DSN2); $siteDB =& DB::connect(DB_DSN1); $result1 =& $siteDB->query("SELECT NAME FROM kod"); if ($row = $result1->fetchRow(DB_FETCHMODE_ASSOC)) { $code = $row['NAME']; echo $code . "<br>\n"; $result2 =& $cisDB->query("SELECT NAME FROM kod WHERE NAME='$code'"); if (DB::isError($result2)) { die($result2->getErrorMessage() . ' ' . $result2->getUserinfo()); } print_r($result2->fetchRow()); echo "<br>\n"; } After that if I remove check "if (DB::isError($result2)) {" I get correct result again. =)) It seems that two database objects are not isolated from each other...I was not able to reproduce the problem with this code: <? require_once "DB.php"; define('DB_DSN1', 'mysql://...'); define('DB_DSN2', 'ibase://...'); $siteDB =& DB::connect(DB_DSN1); $cisDB =& DB::connect(DB_DSN2); $result1 =& $siteDB->query("SELECT N FROM pearquote"); if ($row = $result1->fetchRow(DB_FETCHMODE_ASSOC)) { $code = $row['N']; echo $code . "\n"; $result2 =& $cisDB->query("SELECT N FROM pearquote WHERE N='$code'"); if (DB::isError($result2)) { die($result2->toString()); } $row2 = $result2->fetchRow(DB_FETCHMODE_ASSOC); echo $row2['N'] . "\n"; } ?> Output: 12.3 12.3000001907 Notes: DSN1 is a mysql valid dsn and DSN2 a valid interbase dsn. Results differ because the column is defined as FLOAT and interbase seems to "strangely" output it. I guess the problem is in the use of an old version of the ibase pear db driver/php or a problem with your code. Please download the lastest version from CVS and try again, with this exact test code. FYI a new Pear DB release will be announced in few days. Thanks, Tomas V.V.Cox