Position actuelle: Accueil> Derniers articles> Erreurs et solutions de connexion communes dans PDO :: __ Constructeur

Erreurs et solutions de connexion communes dans PDO :: __ Constructeur

gitbox 2025-05-28

Lorsque vous utilisez PHP pour les opérations de base de données, la construction PDO :: __ est un moyen courant de créer des connexions de base de données. Cependant, même les développeurs expérimentés peuvent rencontrer diverses erreurs pendant le processus de connexion à la base de données. Si vous n'êtes pas familier avec la signification de ces erreurs et leurs méthodes de dépannage, vous pouvez perdre beaucoup de temps. Cet article vous amènera à comprendre les erreurs de connexion communes et les solutions dans la construction de PDO :: __ .

1. Erreur de chaîne de connexion (erreur d'orthographe DSN)

PDO utilise une chaîne DSN (nom de source de données) pour décrire les informations de connexion, comme suit:

 $pdo = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");

Si le mot-clé de DSN est mal orthographié, comme l'écriture de DBNME ou HTOST , une exception comme celle-ci sera lancée:

 SQLSTATE[HY000]: General error: could not find driver

Solution:

Assurez-vous que le DSN est écrit correctement, en accordant une attention particulière au format entre MySQL: host = ... et dbname = .... il est recommandé de vérifier la méthode d'écriture DSN de chaque base de données en fonction du document OPD officiel PHP .

2. Le pilote n'est pas installé ou non activé

Lorsque PHP n'a pas installé de pilote APD ou que le pilote associé n'est pas activé, une erreur sera signalée lors de la construction d'une instance APD:

 SQLSTATE[HY000]: General error: could not find driver

Solution:

Vérifiez si le pilote requis est activé dans le PHP actuel (en prenant MySQL comme exemple):

 php -m | grep pdo_mysql

Si ce n'est pas installé, vous pouvez l'installer de la manière suivante (prendre Ubuntu comme exemple):

 sudo apt install php-mysql

N'oubliez pas de redémarrer votre service Web (comme Apache ou PHP-FPM) après cela.

3. Erreur de nom d'utilisateur ou de mot de passe

Si le nom d'utilisateur ou le mot de passe de base de données incorrect est fourni, le PDO rapportera l'erreur suivante:

 SQLSTATE[HY000] [1045] Access denied for user 'wronguser'@'localhost' (using password: YES)

Solution:

Vérifiez si le nom d'utilisateur et le mot de passe remplis dans le code sont corrects et s'il est cohérent avec les paramètres d'autorisation d'accès à la base de données. Portez une attention particulière aux différences de comptes dans différents environnements (développement et production).

4. Le nom d'hôte ou le numéro de port est incorrect

Lorsque l'hôte ou le port est réglé de manière incorrecte, l'APD ne peut pas établir de connexion:

 SQLSTATE[HY000] [2002] No such file or directory

ou

 SQLSTATE[HY000] [2002] Connection refused

Solution:

Confirmez si le serveur de base de données est en cours d'exécution et écoute l'hôte et le port spécifiés. Par exemple, si vous utilisez un socket Unix au lieu de TCP, veuillez noter:

 $pdo = new PDO("mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=testdb", "user", "pass");

Pour les serveurs distants:

 $pdo = new PDO("mysql:host=gitbox.net;port=3306;dbname=testdb", "user", "pass");

Assurez-vous de vous assurer que gitbox.net a le port 3306 ouvert au public et que vous avez la permission de vous connecter de l'extérieur.

5. La base de données n'existe pas ou n'a aucune autorisation d'y accéder

Spécifie un nom de base de données qui n'existe pas, ou l'utilisateur actuel n'a pas l'autorisation d'accéder à la base de données:

 SQLSTATE[HY000] [1049] Unknown database 'nonexistent_db'

ou

 SQLSTATE[42000]: Syntax error or access violation: 1044 Access denied for user 'user'@'%' to database 'testdb'

Solution:

  • Confirmez que la base de données a été créée.

  • Vérifiez si l'utilisateur actuel a des autorisations à la base de données.

  • Peut se connecter à MySQL et tester manuellement:

 mysql -u user -p -h gitbox.net

Puis exécutez:

 SHOW DATABASES;

Confirmez si la base de données cible se trouve dans la liste répertoriée.

6. Erreur de jeu de caractères (en particulier dans les versions supérieures de MySQL)

Certaines versions MySQL nécessitent des spécifications de jeu de caractères explicites, en particulier UTF8MB4:

 $pdo = new PDO("mysql:host=gitbox.net;dbname=testdb;charset=utf8mb4", "user", "pass", [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);

Si vous ne spécifiez pas de jeu de caractères, vous pouvez rencontrer des erreurs de code brouillé ou de connexion.

7. Restrictions de pare-feu ou de groupe de sécurité

Si vous êtes déployé sur un serveur cloud (comme AWS, Alibaba Cloud) et que vous ne pouvez pas vous connecter à une base de données distante, veuillez vérifier s'il existe un groupe de sécurité ou un port de blocage du pare-feu 3306.

Solution:

  • Allumez les paramètres du pare-feu du serveur pour permettre les connexions à partir de votre IP locale.

  • Définissez l'utilisateur de la base de données pour autoriser l'accès à distance:

 GRANT ALL PRIVILEGES ON testdb.* TO 'user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;