PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Errore di mancata corrispondenza dei dati di Laravel durante l'utilizzo di \PDO::ATTR_EMULATE_PREPARES => true

1) Innanzitutto, devi modificare l'opzione PDO che stai fornendo nelle opzioni nell'array pgsql del tuo database.php nel modo giusto è come indicato di seguito.

'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) In secondo luogo, e la cosa più importante è assicurarsi di utilizzare l'impostazione "ATTR_EMULATE_PREPARES" su "true" con ogni connessione al database che si tenta di connettere nel proprio Database.php file.

Ad esempio,

'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
        ]           
    ]

Assicurati di utilizzare "ATTR_EMULATE_PREPARES" su true per ogni connessione al database che fai nella tua applicazione, nei tuoi commenti effettui la connessione solo con "pgsql" con enfasi solo per la connessione postgres sql e non con il database che la tua applicazione comunica quale è in postgres.

Spero che questo ti aiuti a risolvere la tua domanda. Divertiti!!!