PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Laravel-Datenkonfliktfehler bei Verwendung von \PDO::ATTR_EMULATE_PREPARES => true

1) Zuerst müssen Sie die PDO-Option ändern, die Sie in den Optionen im pgsql-Array Ihrer database.php angeben. Der richtige Weg ist wie unten angegeben.

'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) Zweitens, und das Wichtigste ist, sicherzustellen, dass Sie "ATTR_EMULATE_PREPARES" bei jeder Datenbankverbindung, die Sie versuchen, in Ihrer Database.php zu verbinden, auf "true" setzen Datei.

Zum Beispiel

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

Bitte stellen Sie sicher, dass Sie „ATTR_EMULATE_PREPARES“ für jede Datenbankverbindung, die Sie in Ihrer Anwendung herstellen, auf „true“ verwenden. In Ihren Kommentaren stellen Sie eine Verbindung nur mit „pgsql“ her, die nur für Postgres-SQL-Verbindungen betont wird, und nicht mit der Datenbank, mit der Ihre Anwendung kommuniziert befindet sich in Postgres.

Ich hoffe, dies hilft Ihnen, Ihre Frage zu lösen. Viel Spaß!!!