#41368 [Com]: ADODB.Recordset ActiveConnection property - can't set with PHP 5.2.1+

From: Date: Fri, 07 Nov 2008 14:53:17 +0000
Subject: #41368 [Com]: ADODB.Recordset ActiveConnection property - can't set with PHP 5.2.1+
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-130752@lists.php.net to get a copy of this message
ID: 41368 Comment by: anikushin at gmail 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: I thing I'm expirionsing the same error but this is a connecton closed error, i think the connections drops with some microsoft gates. (unexpected error acured). hate VB with all junk from IT is any one will be reponsible for coding? Sorry, code (error) =============================================== Connection OPEN. Microsoft Access Driver: D:\ACCESS\DNSVER50.MDB Execute: SELECT * FROM Customers WHERE CustNo = 22585; Execute: INSERT INTO Customers ( CustName,CustAddress1,CustAddress2,CustCity,CustState,CustZip,CustTelephone,CustContact,Title,Notes,CustFaxNumber ) VALUES ( 'ADRIAN ANIKUSHIN','','XX XXXXXX STREET APP#1','MELROSE','MA','02176','1 (781) xxxxxxxx','ADRIAN ANIKUSHIN','','','1 (781) xxxxxxxx' ); Fatal error: Uncaught exception 'com_exception' with message 'Source: ADODB.Recordset Description: Operation is not allowed when the object is closed.' in D:\WWW\dns\access_order.php:8 Stack trace: #0 D:\WWW\dns\access_order.php(8): get_access_array() #1 D:\WWW\dns\access_order.php(55): get_access_array('INSERT INTO Cus...') #2 D:\WWW\dns\access_order.php(135): insert_access_array('Customers', Array) #3 D:\WWW\dns\access_order.php(201): get_access_customer(Array, 'shipper') #4 {main} thrown in D:\WWW\dns\access_order.php on line 8 Previous Comments: ------------------------------------------------------------------------ [2008-01-08 13:27:18] pinkduck at dsl dot pipex dot com 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 ------------------------------------------------------------------------ [2007-08-15 08:33:15] jani@php.net 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

« previous php.bugs (#130752) next »