ID: 41368
Comment by: pinkduck at dsl dot pipex dot com
Reported By: ben dot crum at colony101uk dot com
Status: Assigned
Bug Type: COM related
Operating System: Windows XP SP2
PHP Version: 5.2.2
Assigned To: wez
New Comment:
This bug affects me too, the following code fails when trying to set
the ActiveConnection back to null to allow a disconnected recordset.
// Connect to database
$dsn = "Provider=SQLNCLI;Server=localhost;UID=********;Pwd=*******";
$conn = new COM("ADODB.Connection");
$conn->ConnectionTimeout = CONNECTION_TIMEOUT_SECONDS;
$conn->CommandTimeout = COMMAND_TIMEOUT_SECONDS;
$conn->CursorLocation = adUseClient;
$conn->Open($dsn);
// Get recordset
$cmd->ActiveConnection = $conn;
$rs->Open($cmd);
// $rs->ActiveConnection = null; // PHP5 bug #41368
Previous Comments:
------------------------------------------------------------------------
[2007-08-15 08:33:15] [EMAIL PROTECTED]
Assigned to the maintainer.
------------------------------------------------------------------------
[2007-05-11 17:29:29] ben dot crum at colony101uk dot com
Description:
------------
This seems similar to Bug #22162 - Program performs "illegal
operation", but that was for PHP 4.3.1-dev.
I originally had PHP 5.1.6 installed on my PC and had written a few
scripts using ADODB Connections and Recordsets. These ran fine as web
pages served by Apache's HTTP Server v2.0.
I upgraded to PHP 5.2.2 using the MSI and my scripts reported errors
for the same line of code.
Overwriting the contents of my C:\PHP\ folder with the contents of the
PHP 5.2.0 Zip file, I do NOT get these errors when running my scripts as
web pages through Apache or from the command line (i.e. "php.exe
c:\Web\simple.php").
If I overwrite the contents of my C:\PHP\ folder with the PHP 5.2.1 or
5.2.2 Zip files I get the error mentioned above when running them
through Apache or from the command line.
Reproduce code:
---------------
Here is a simple sample that works with PHP 5.2.0, but breaks for me
when using PHP 5.2.1+:
------------------------------
<?php
$rs = new COM('ADODB.Recordset');
// Problem line below for PHP 5.2.1+:
$rs->ActiveConnection = 'PROVIDER=SQLOLEDB; DATA SOURCE=(local);
UID=sa; PWD=password; INITIAL CATALOG=myDB';
$rs->CursorLocation = 3;
$rs->Source = 'SELECT * FROM [myTable]';
$rs->Open();
if ( $rs->EoF )
{
print( '- No records returned. -' );
}
else
{
print( 'Returned records: ' . $rs->RecordCount );
}
$rs->Close();
$rs = NULL;
?>
------------------------------
Expected result:
----------------
This is the error I get on lines that set an ADODB.Recordset object's
.ActiveConnection property:
Fatal error: Uncaught exception 'com_exception' with message
'<b>Source:</b> Provider<br/><b>Description:</b> Type mismatch.' in
C:\Web\simple.php:4 Stack trace: #0 C:\Web\simple.php(4): unknown() #1
{main} thrown in C:\Web\simple.php on line 4
Actual result:
--------------
I don't think it's the objects and their properties coz this works as a
VBScript (.vbs) file (no hissing please!):
------------------------------
OPTION EXPLICIT
DIM rs
SET rs = CreateObject("ADODB.Recordset")
rs.ActiveConnection = "PROVIDER=SQLOLEDB; DATA SOURCE=(local); UID=sa;
PWD=password; INITIAL CATALOG=myDB"
rs.CursorLocation = 3
rs.Source = "SELECT * FROM [myTable]"
rs.Open
IF ( rs.EoF ) THEN
WScript.Echo( "- No records returned. -" )
ELSE
WScript.Echo( "Returned records: " & rs.RecordCount )
END IF
rs.Close
SET rs = Nothing
------------------------------
It looks to me that after 5.2.0, PHP no longer lets you set the
.ActiveConnection of an ADODB.Recordset (or I've just messed up my PHP
folder...).
Thanks for your help.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=41368&edit=1