PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Erreur de non-concordance des données Laravel lors de l'utilisation de \PDO::ATTR_EMULATE_PREPARES => true

1) Tout d'abord, vous devez modifier l'option PDO que vous donnez dans les options du tableau pgsql de votre base de données.php, comme indiqué ci-dessous.

'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) Deuxièmement, et la chose la plus importante est de vous assurer que vous utilisez le paramètre "ATTR_EMULATE_PREPARES" sur "true" avec chaque connexion à la base de données que vous essayez de vous connecter dans votre Database.php fichier.

Par exemple,

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

Assurez-vous d'utiliser le "ATTR_EMULATE_PREPARES" à true pour chaque connexion de base de données que vous effectuez dans votre application, dans vos commentaires, vous établissez une connexion avec uniquement "pgsql" qui met l'accent uniquement sur la connexion postgres sql, et non avec la base de données que votre application communique qui est en postgres.

J'espère que cela vous aidera à résoudre votre requête. Amusez-vous !!!