PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Erro de incompatibilidade de dados do Laravel ao usar \PDO::ATTR_EMULATE_PREPARES => true


1) Primeiro, você precisa alterar a opção PDO que você está dando nas opções do array pgsql do seu database.php da maneira correta é mostrada abaixo.
'pgsql' => [
        'driver' => 'pgsql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '5434'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),           
        'charset' => 'utf8',
        'prefix' => '',
        'schema' => 'public',
        'sslmode' => 'prefer',
        'options' => [
            PDO::ATTR_EMULATE_PREPARES => true
        ]       
        ]

2) Em segundo lugar, e o mais importante é certificar-se de que você use "ATTR_EMULATE_PREPARES" para "true" com cada conexão de banco de dados que você tentar conectar em seu Database.php Arquivo.

Por exemplo,
'test' => [
        'driver' => 'pgsql',
        'host' => env('test', '127.0.0.1'),
        'port' => env('test', '5434'),
        'database' => env('DB_TEST_DATABASE', 'test'),
        'username' => env('DB_USERNAME', 'test'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'prefix' => '',
        'schema' => 'public',
        'sslmode' => 'prefer',
        'options' => [
            PDO::ATTR_EMULATE_PREPARES => true
        ]           
    ],
'test1' => [
        'driver' => 'pgsql',
        'host' => env('test1', '127.0.0.1'),
        'port' => env('test1', '5434'),
        'database' => env('DB_TEST1_DATABASE', 'test1'),
        'username' => env('DB_USERNAME', 'test'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'prefix' => '',
        'schema' => 'public',
        'sslmode' => 'prefer',
        'options' => [
            PDO::ATTR_EMULATE_PREPARES => true
        ]           
    ]

Por favor, certifique-se de usar o "ATTR_EMULATE_PREPARES" para true para cada conexão de banco de dados que você fizer em sua aplicação, em seus comentários você faz conexão apenas com "pgsql" que dá ênfase apenas para conexão postgres sql, e não com o banco de dados que sua aplicação comunica qual está no postgres.

Espero que isso ajude você a resolver sua dúvida. Apreciar!!!