ID:               27696
 Updated by:       [EMAIL PROTECTED]
 Reported By:      gioppo at csi dot it
-Status:           Open
+Status:           Feedback
 Bug Type:         OCI8 related
 Operating System: System  Linux 2.2.19-6.2.1
 PHP Version:      Irrelevant
 Assigned To:      tony2001
 New Comment:

I can't reproduce it neither with PHP4, nor with PHP5.

Have you tried latest versions?


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

[2004-03-31 01:22:48] gioppo at csi dot it

Well I think that I've found a workaround.

To test it you can take the code from:

http://php.weblogs.com/adodb

and try a simple connection.

In any case you can try to see what happens if someone compile the
php+OCI using a symbolic link for oracle_home and than uses an absolute
oracle_home.

There could be a bug.

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

[2004-03-30 10:03:27] [EMAIL PROTECTED]

So, you've solved it, yes?

This piece of code didn't help me much, just because I can't test it.

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

[2004-03-30 09:05:14] gioppo at csi dot it

We probably solved the problem bypassing tnsnames.ora.

We made the connection using tnsnames defined alias and it got errors
sometime.

Here is a chunk of php code (we used method b which gave errors
sometime, when we used d mode we always manage to make connection) any
hint? A problem on finding tnsnames?

NOTE OCILogon is a php library function so no hint on how to modify it,
but the behaviour meke me think about an environment problem:

we have a 

Compile-time ORACLE_HOME  /oracle_home  for compiling OCI for php

but

ORACLE_HOME  /oracle817/app/oracle/product/8.1.7  

_ENV["ORACLE_HOME"] /oracle817/app/oracle/product/8.1.7 

on env for apache and php (/oracle_home  is a symbolic link to the
/oracle817/app/oracle/product/8.1.7 folder) could be that the OCI8 so
compiled have trouble on traversing the link?



/*



  Multiple modes of connection are supported:

  

  a. Local Database

    $conn->Connect(false,'scott','tiger');

  

  b. From tnsnames.ora

    $conn->Connect(false,'scott','tiger',$tnsname); 

    $conn->Connect($tnsname,'scott','tiger'); 

  

  c. Server + service name

    $conn->Connect($serveraddress,'scott,'tiger',$service_name);

  

  d. Server + SID

        $conn->connectSID = true;

        $conn->Connect($serveraddress,'scott,'tiger',$SID);





Example TNSName:

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

NATSOFT.DOMAIN =

  (DESCRIPTION =

        (ADDRESS_LIST =

          (ADDRESS = (PROTOCOL = TCP)(HOST = kermit)(PORT = 1523))

        )

        (CONNECT_DATA =

          (SERVICE_NAME = natsoft.domain)

        )

  )

  

  There are 3 connection modes, 0 = non-persistent, 1 = persistent, 2 =
force new connection

        

*/

function _connect($argHostname, $argUsername, $argPassword,
$argDatabasename,$mode=0)

{

       $this->_errorMsg = false;

       $this->_errorCode = false;

                

        if($argHostname) { // added by Jorma Tuomainen
<[EMAIL PROTECTED]>

                if (empty($argDatabasename)) $argDatabasename = $argHostname;

                else {

                        if(strpos($argHostname,":")) {

                                $argHostinfo=explode(":",$argHostname);

                                $argHostname=$argHostinfo[0];

                                $argHostport=$argHostinfo[1];

                        } else {

                                $argHostport="1521";

                        }

                                

                        if ($this->connectSID) {

                                
$argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname

                                
.")(PORT=$argHostport))(CONNECT_DATA=(SID=$argDatabasename)))";

                        } else

                                
$argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname

                                
.")(PORT=$argHostport))(CONNECT_DATA=(SERVICE_NAME=$argDatabasename)))";

                        }

                }

                                

                if ($mode==1) {

                        $this->_connectionID = OCIPLogon($argUsername,$argPassword,
$argDatabasename);

                        if ($this->_connectionID && $this->autoRollback) 
OCIrollback($this->_connectionID);

                } else if ($mode==2) {

                        $this->_connectionID = OCINLogon($argUsername,$argPassword,
$argDatabasename);

                } else {

                        $this->_connectionID = OCILogon($argUsername,$argPassword,
$argDatabasename);

                }

                if ($this->_connectionID === false) return false;

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

[2004-03-26 05:00:13] [EMAIL PROTECTED]

Please, try latest stable PHP release.

And try latest PHP5 snapshot, there are a lot of changes since
November.

I have no idea what code ADO uses to connect to Oracle, so please
provide a short example with standard PHP functions, not wrapped with
ADO or other wrapper.

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

[2004-03-25 17:16:32] gioppo at csi dot it

Here is a note from oracle metalink



The errors ( ORA-24327, OCI-21560) may indicate OCI usage error 



if you are using OCI, can you verify if it's possible to physically
connect to a server process or dispatcher ( for MTS-configured DB) via
OCIServerAttach ... then try to authenticate one of more users via that
connection to start one or more database sessions (via 

OCISessionBegin). 



IF OCIServerAttach fails and OCISessionBegin is invoked, you may get
errors. 





According to OCI Programmer's guide (OCISessionBegin) 



For release 8.1 or later, OCISessionBegin() must be called for any
given server handle before requests can be made against it.
OCISessionBegin() only supports authenticating the user for access to
the Oracle server specified by the server handle in the service
context. In other words, after OCIServerAttach() is called to
initialize a server handle, OCISessionBegin() must be called to
authenticate the user for that given server.

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

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/27696

-- 
Edit this bug report at http://bugs.php.net/?id=27696&edit=1

Reply via email to