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:

So, you've solved it, yes?

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


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

[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.

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

[2004-03-25 16:59:39] gioppo at csi dot it

I've red the changelog between the 4.3.2 and the actual php version but
it doesn't seems to have any mods on oci part.

I've red somewhere that the problem could be bacause on oci code could
be called the session init before the attach.

Really do not understand it how expecially since in the situation where
we have just 1 web server everithing goes well but with 4 behind a
balancer we get the error.

No code change so really getting mad about it, any hint on where to
look for more data is appreciated.

ORACLE_HOME is set, the tnsname is correct (otherwise we should never
connect) going to look also on metalink for some other help.

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

[2004-03-25 16:49:07] gioppo at csi dot it

Using ADODB project, istanciating this chunk of code:

$dbconn        = ADONewConnection($dbtype);

$dbh = $dbconn->Connect($dbhost, $dbuname, $dbpass,        $dbname);



This means that the code executed is:

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

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

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