Bobby Bob
Bobby Bob

Reputation: 31

Connecting to Oracle 18c Database with OCI8

I have set up an Oracle 18c database and am trying to connect to it from a php file but when I run a simple connection test, I receive a server error where it cant't seem to connect. I ran print_r(getLoaded_extensions()); and from the output array it shows that I am currently not using the oci8 extension as I wanted. My connection test file contains the following

#!/usr/local/bin/php
<?php
putenv("ORACLE_HOME=/usr/lib/oracle/18.3/client64")

    $db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ***.***.*.**)(PORT = 1521)))(CONNECT_DATA=(SID=orcl)))" ;

    if($c = OCILogon("username", "password", $db))
    {
        echo "Successfully connected to Oracle.\n";
        OCILogoff($c);
    }
    else
    {
        $err = OCIError();
        echo "Connection failed." . $err[text];
    }

I am unsure whether I set my putenv() wrong to the correct location of the oci.dll file or if I need to install the extension in the first place. Thank you

Upvotes: 0

Views: 2054

Answers (2)

Vijay Balebail
Vijay Balebail

Reputation: 185

Most probably, the 18c default installation creates a Container DB (CDB) called ORCL and PDB1 (pluggable DB).. Run lsnrctl stat to look for the services created. then, in DB connection, use service_name instead of SID for connection. The value of service_name can be seen in the output of lsnrctl stat

Example.

 $db = "(DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = patronus.domain.com)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = pdb1.domain.com)
        )
      )" ;

Upvotes: 0

kwong1996
kwong1996

Reputation: 51

Since you said that you checked your currently used extensions and OCI8 is not present, I would go ahead and install the module and enable it on your server

Upvotes: 1

Related Questions