Cannot connect database oracle with symfony2

2019-04-11 20:11发布

what i need

  • i need to connect oracle database with symfony2.

  • i have checked by php -m

    • oci8
    • pdo_odbc

    • odbc

here is the link i follow https://gist.github.com/johnkary/6481664

a.)config.yml

Doctrine Configuration

 doctrine:
dbal:
    default_connection:   default
    connections:
        default:
            driver:   "%database_driver%"
            host:     "%database_host%"
            port:     "%database_port%"
            dbname:   "%database_name%"
            user:     "%database_user%"
            password: "%database_password%"
            charset:  "%database_charset%"

b.) parameter.yml

  # If connecting via SID
 parameters:
database_driver:   oci8
database_host:     abc
database_port:     '1521'
database_name:     test
database_user:     aa
database_password: aa
database_charset:  AL32UTF8
mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: null
mailer_password: null
locale: en
secret: zzzz

c.)services.orcale.yml

 services:
acme.doctrine.dbal.events.oracle_session_init.listener:
    class: %doctrine.dbal.events.oracle_session_init.class%
    tags:
        - { name: doctrine.event_listener, event: postConnect }
acme.doctrine.dbal.oracle_platform.type_mapping.listener:
    class: Acme\MisBundle\Listener\OracleDoctrineTypeMappingListener
    tags:
        - { name: doctrine.event_listener, event: postConnect }
  • then run symfony database cmd

     php bin/console doctrine:database:create
    

error:

 cannot create database test for connection named default.
 notice: undefined index dbname
  • i have googled a day but i think there are few developer who works with symfony2 and oracle.

  • i had made simple php script that works to test connections

    $userName = ""; $password = ""; $dtabasePort = "1521"; $serverName = "";
    
    $databaseName = "testingdb";
    $c = oci_connect($userName, $password, '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = host)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ) (SID =)))');
    
     print_r($c);
    

output

       Resource id #3

tsnames.ora

    test=

       (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = sss)(PORT = 1521))
          (CONNECT_DATA = (SID = test))
         )
  • i have worked sf3 and mysql but im new to oracle thats why i don"t knew how to connect oracle db with symfony.

  • please give some solution where i have done wrong.

  • Can anyone suggest in steps how to connect oracle db with sf2/3 is most appreciated.

  • link of github relies same issue that im facing https://github.com/doctrine/dbal/issues/1564

    • i have also changed the parameter.yml file

       parameters:
       database_driver: oci8
       database_user: <user>
       database_password: <password>
       database_charset: WE8MSWIN1252
       database_name: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<host>)(PORT=<port>))(CONNECT_DATA=(SERVICE_NAME=<service_name>)))
      

then error you have requested non-existence parameter "database_host"

last & final solution i tried but didn"t worked i think there bug in sf2 for oracle

    parameters:

        database_driver: oci8    
        database_host: 
        database_port: 1521
        database_name: 
        database_user: 
        database_password: 
        domain_name: 

     doctrine:
        dbal:
            default_connection:   default
            connections:
                default:
                    driver:   "%database_driver%"
                    host:     "%database_host%"
                    port:     "%database_port%"
                    dbname:   "%database_name%"
                    user:     "%database_user%"
                    password: "%database_password%"
                    charset:  UTF8
                    persistent: true
        orm:
            auto_generate_proxy_classes: "%kernel.debug%"
            auto_mapping: true
    services:
         pdo:
            class: PDO
            arguments:
                - "oci8:Server=%database_host%;Database=%database_name%"
                - "%database_user%"
                - "%database_password%"
            calls:
                - [setAttribute, [3, 2]] # \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION

         session.handler.pdo:
            class:     ESERV\MAIN\FrameworkChanges\MtlPdoSessionHandler
            arguments: ["@pdo", "%pdo.db_options%"]   

1条回答
干净又极端
2楼-- · 2019-04-11 21:07

here is what I use to connect MSSQL : https://github.com/realestateconz/MssqlBundle

config.yml :

doctrine:
dbal:
    types:
        string: ***\BacsManagementBundle\Type\StringType
    default_connection: default
    connections:
        default: 
            host:     "%database_host%"
            dbname:   "%database_name%"
            user:     "%database_user%"
            password: "%database_password%"
            driver_class:   Realestate\MssqlBundle\Driver\PDODblib\Driver
            mapping_types:
                enum: string
                string: string

hope it helps.

查看更多
登录 后发表回答