ID: 9065
Updated by: kalowsky
Reported By: [EMAIL PROTECTED]
Old-Status: Open
Status: Feedback
Bug Type: ODBC related
Operating system: 
PHP Version: 4.0.3pl1
Assigned To: 
Comments:

A) simpliest form for each test script please
B) still happen under PHP 4.0.5?  There might be a need to
tweak the php_odbc.h file (remove the #include <iodbc.h> line).

Previous Comments:
---------------------------------------------------------------------------

[2001-02-02 01:14:18] [EMAIL PROTECTED]
Here is the script I used to test all connections with. Ensure php.ini is setup so 
that errors are passed back to $php_errormsg;

----------

<HTML>
<HEADER><TITLE>ODBCTEST</TITLE></HEADER>
<BODY BGCOLOR=EEEEEE TEXT=BLACK>
<FONT FACE=Tahoma>
<FONT COLOR=0099FF><B>ODBCTEST. By Sigurd Magnusson. </B></FONT>
<FONT COLOR=555555 SIZE=-2><B>(PHP <? echo phpversion()," on $SERVER_SOFTWARE)" 
?></B></FONT>
<P>
<FORM ACTION=odbctest.php METHOD=POST>
DSN: <INPUT TYPE=TEXT NAME=odbc_dsn VALUE="<? echo $odbc_dsn ?>">
Username: <INPUT TYPE=TEXT NAME=odbc_username VALUE="<? echo $odbc_username ?>">
Password: <INPUT TYPE=TEXT NAME=odbc_password VALUE="<? echo $odbc_password ?>">
Table: <INPUT TYPE=TEXT NAME=odbc_tablename VALUE="<? echo $odbc_tablename ?>">
<INPUT TYPE=SUBMIT VALUE=Test>
<DIV ALIGN=RIGHT>(If no table is specified, odbctest will search for them).</DIV>

</FORM>
<HR>

<?
if ($odbc_dsn == "") die("<B>No DSN specified</B>");

Echo "<OL>";

Echo "<LI><B>Connecting...</B><BR>odbc_connect($odbc_dsn, $odbc_username, 
$odbc_password); "; flush;

$connect = @odbc_connect($odbc_dsn, $odbc_username, $odbc_password, SQL_CUR_USE_ODBC); 

if ($connect) echo "<B>connected.</B><P>"; else ExitDying ("Connect Failed", 
$php_errormsg);
flush();

if ($odbc_tablename) QueryTable($odbc_tablename); else ShowTables();
        
odbc_close($connect);   
echo "</OL><HR>";
echo "<FONT COLOR=0099FF><B>ODBC Test Finished!</B></FONT>";
return;


////////////////////////////////////////////////////////////////////////////////////
function QueryTable($tablename) {
////////////////////////////////////////////////////////////////////////////////////
        global $connect;
        $maxdisplayrows= 10;

        $query ="SELECT * FROM $tablename";
        Echo "<LI><B>Querying $tablename...</B><BR>odbc_exec($connect, $query); ";

        $result = @odbc_exec($connect, $query);      // perform the query

        if ($result) echo "<B>ok.</B><P>"; else ExitDying ("Query Failed", 
$php_errormsg);

        Echo "<LI><B>Retrieving Data...</B><BR>odbc_fetchrow($result); ";

        // get column names
        $NumODBCFields = (int)odbc_num_fields($result);
        echo "<table cellpadding=5 bgcolor=BLACK><tr bgcolor=yellow>";
        for ($i=1; $i <= $NumODBCFields; $i++) {
                echo "<TD><FONT 
SIZE=2><B>".odbc_field_name($result,$i)."</B><BR>".odbc_field_type($result,$i), " ", 
odbc_field_len($result,$i), "</TD>";
        }
        echo "</tr>";

        while(@odbc_fetch_row($result)) {
                if ($rowcount++ < $maxdisplayrows) {
                        echo "<tr bgcolor=22BBFF>";
                        for ($i=1; $i <= $NumODBCFields; $i++) {
                                $txt = @odbc_result($result, $i);
                                echo "<TD><FONT SIZE=1>$txt</FONT></TD>";
                        }
                        echo "</tr>";
                }
        }
        echo "</table>";

        if ($rowcount > $maxdisplayrows) $msg = "(only first $maxdisplayrows shown 
above)";

        // if search is narrowing the rows down, we need to tally that instead ;(
        echo "<BR>Found <B>".(int)$rowcount." Rows</B> $msg, 
<B>".odbc_num_fields($result)." Columns</B> in table <B>$tablename</B>";
}


////////////////////////////////
function ShowTables() {
        global $connect;

        Echo "<LI><B>Finding Tables...</B><BR>odbc_exec($connect, $query); "; flush();
        $result = @odbc_tables($connect,"%");

        if ($result) echo "<B>ok</B><P>"; else ExitDying("Table Searching Not 
Permitted?", $php_errormsg);
        flush();

        // get column names
        $NumODBCFields = (int)odbc_num_fields($result);
        echo "<table cellpadding=5 bgcolor=BLACK><tr bgcolor=white>";
        for ($i=1; $i <= $NumODBCFields; $i++) {
                echo "<TD><FONT 
SIZE=2><B>".odbc_field_name($result,$i)."</B><BR>".odbc_field_type($result,$i), " ", 
odbc_field_len($result,$i), "</TD>";
        }
        echo "</tr>";

        while(@odbc_fetch_row($result)) {
                echo "<tr bgcolor=white>";
                for ($i=1; $i <= $NumODBCFields; $i++) {
                        echo "<TD><FONT SIZE=1>".odbc_result($result, $i), 
"</FONT></TD>";
                }
                echo "</tr>";

                if (odbc_result($result, "TABLE_TYPE") == "TABLE") {
                        $querytablename = odbc_result($result, "TABLE_NAME");
                        echo "<TR bgcolor=white><TD COLSPAN=$NumODBCFields>";
                        QueryTable($querytablename);
                        echo "</TD></TR>";
                        $numtables++;
                }
                                
        }
        
        echo "</table>";

        if (!$numtables) $numtables = "<B>no</B>";
        echo "Found $numtables tables...";
}

////////////////////////////////////////////////////////////////////////////////////
function ExitDying ($msg, $errormsg) {
////////////////////////////////////////////////////////////////////////////////////
        Echo "<P><TABLE BGCOLOR=BLACK CELLPADDING=12><TR><TD BGCOLOR=WHITE>";
        Echo "<FONT COLOR=RED><B>$msg</B></FONT><TT><P>$errormsg</TT>";
        Echo "</TD></TR><TABLE>";
        exit;
}


---------------------------------------------------------------------------

[2001-02-02 01:12:08] [EMAIL PROTECTED]
When I connect from Linux Redhat (COBALT RAQ2)
PHP403sp1/Apache1.3.12 to a database on Win2000 using Openlink version *4*:

(PHP './configure' '--with-openlink=/usr/local/openlink' '--with-mysql' 
'--with-apache=../apache_1.3.12' '--enable-track-vars' )

Openlink(Linux) -> AccessDB(Win2k): Connects to database, SQL queries fail with "Not 
Capable" error (see below). Retreiving list of tables fails with odbc_tables(); 
(complains that odbc_tables($con, "%"); doesn't have the correct number of parameters.

Openlink(Linux) -> MyODBC(W2K) -> MySQL(W2K)
Connects to database, SELECTs return columns, but not rows.
Retriving list of tables "fails" (as can only see columns, such as TableName, 
TableType, but no data)

--
When I connect from Win2000 PHP403sp1/IIS5 to database on Win2000 using Openlink:

Openlink -> Access: Works okay, except cannot retrieve TYPE of field. (This is of 
little concern.).

Openlink -> MyODBC -> MySQL: as above.

When doing not using Openlink at all and connecting directly to Access all on the same 
W2k Machine, everything works perfectly.

Errors Under Linux:

SELECT * FROM TABLE produces: SQL error: [OpenLink][ODBC][Driver]Driver not capable, 
SQL state S1C00 in SQLExecDirect


I am using odbc_connect() and odbc_exec(). (not prepare() ). Have tested differenet 
cursor types with odbc_connect; nothing helps.

Using ODBCTEST (the testing utility with Openlink software), everything works fine - i 
have access to all tables, databases, can perform complex SELECT and other queries 
without any hassle.

Thus, this is a problem not specific to Access, because I can connect to Access from 
Win2000 PHP/Openlink

It is not really a problem with openlink, because ODBCTEST works fine.

Thus it means it is to do with the Openlink and PHP403sp1 cooperating (on redhat). I 
tried compiling PHP404 with Openlink4, but it failed (possibly due to Apache1.3.17).

---------------------------------------------------------------------------



ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at http://bugs.php.net/?id=9065&edit=2


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to