Bug #17572 Updated: Calling odbc_tables crashes
| From: | kalowsky@php.net | Date: | Mon, 24 Jun 2002 20:39:47 +0000 |
| Subject: | Bug #17572 Updated: Calling odbc_tables crashes | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-11966@lists.php.net to get a copy of this message | ||
ID: 17572
Updated by: kalowsky@php.net
Reported By: jma@jma.se
-Status: Open
+Status: Feedback
Bug Type: ODBC related
Operating System: W2K, FP2
PHP Version: 4.2.1
New Comment:
The crash comes from your use of odbc_free_result. If you notice you
call it twice, both times trying to free the $th value. You can't
really clear out the result while still trying to read it ;) Adding
some simple printf debug statements shows this. Can you please try
this change and report back if it works or not?
Needless to say, this leads to an interesting problem which says that
this shouldn't really happen (there should be some checks on this). So
it looks like some sort of modifications will be needed to make checks
for this. Hope to see them for 4.3, but don't hold your breath very
long... I'm in the process of moving and promise nothing.
The simplified version also suffers the same problem (the
odbc_free_result while using it).
Previous Comments:
------------------------------------------------------------------------
[2002-06-14 15:01:14] grangeway@hotmail.com
A shorter version of this crash is :
$ms = odbc_connect("moo", "", "");
$th = odbc_tables ($ms);
while (odbc_fetch_row($th))
{
odbc_free_result($th);
}
------------------------------------------------------------------------
[2002-06-12 17:58:04] mwilmes@avc.edu
I've tried this on two platforms W98 using Xitami, and W2K using
iPlanet, but my bug is slightly different: My ODBC drivers don't load,
error IM003. But those ODBC drivers worked with Access and an Oracle
frontend. The W2K was a fresh install this morning with the ODBC
drivers and PHP. This problem was resolved on BOTH platforms by
retrograding to 4.2.0.
------------------------------------------------------------------------
[2002-06-05 05:25:55] jma@jma.se
Tried the php4-win32-200206031400.zip build but the excat same thing
happened :-(
/JMA
------------------------------------------------------------------------
[2002-06-03 06:29:24] derick@php.net
Can you please try a non-stable snapshot from snaps.php.net/win32 and
report back if it works?
Please do not forget to update your php4ts.dll.
Derick
------------------------------------------------------------------------
[2002-06-03 06:26:13] jma@jma.se
This script crashes after showing the first table.
This is consistant on several ODBC sources (tried Access, Foxpro and
DB2).
This script worked with 4.0 versions.
<?php
$host = ""; // Enter your ODBC connection here
$uid = "";
$pwd = "";
$ms = odbc_connect($host, $uid, $pwd);
$th = odbc_tables ($ms);
while (odbc_fetch_row($th))
{
if (odbc_result($th, "TABLE_TYPE") == "TABLE")
{
$table = odbc_result($th, "TABLE_NAME");
printf("<H2>%s</H2>\n", $table);
$fh = odbc_columns($ms);
echo "<BLOCKQUOTE>\n";
echo "<TABLE BORDER=0 CELLPADDING=10>\n";
while (odbc_fetch_row($fh))
{
if (odbc_result($fh, "TABLE_NAME") == $table)
{
printf("<TR>");
printf("<TD>%s</TD>", odbc_result($fh,
"TYPE_NAME"));
printf("<TD><B>%s</B></TD>",
odbc_result($fh,
"COLUMN_NAME"));
switch (odbc_result($fh, "DATA_TYPE"))
{
default:
}
printf("</TR>\n");
}
}
echo "</TABLE>\n";
echo "</BLOCKQUOTE>\n";
odbc_free_result($th);
}
}
odbc_free_result($th);
odbc_close ($ms);
?>
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=17572&edit=1