PHP: PDO: Impossible de se connecter, Invalide nom de catalogue
Je suis en train de mettre en place un nouveau site sur mon hébergement (Accueil de route si c'est important), mais j'obtiens cette erreur quand j'ai essayer d'utiliser PDO (premier AOP site im essayant):
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected' in /home/kennyi81/public_html/gamersite/login.php:36 Stack trace: #0 /home/kennyi81/public_html/gamersite/login.php(36): PDOStatement->execute() #1 {main} thrown in /home/kennyi81/public_html/gamersite/login.php on line 36
Quand j'utilise ces paramètres:
$dbh = new PDO("mysql:91.146.107.11;dbname=kennyi81_gamersite", "kennyi81_gamer", "***************");
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
....
$stmt = $dbh->prepare('SELECT * FROM USERS WHERE ID = :id LIMIT 1');
Comment la base de données est établie:
Je suis en mesure d'utiliser mysqli se connecter très bien sur mes autres sous-domaines /site principal, mais j'ai juste ne peut pas obtenir de l'AOP de travail.
J'ai essayé ce que j'ai vu autour de:
$stmt = $dbh->prepare('SELECT * FROM gamersite.USERS WHERE ID = :id LIMIT 1');
mais il retuns une erreur de syntaxe.
Quelqu'un a une idée de ce que peut être la cause?
C'est tout mon travail sur mon serveur local, rien n'a changé sur le téléchargement en dehors de communiquer en ligne.
new PDO("mysql:host=91.146.107.11
Ses $stmt->execute(); pour la requête ci-dessus.
OriginalL'auteur Tristan Cunningham | 2013-08-28
Vous devez vous connecter pour publier un commentaire.
Au lieu de:
Essayer:
(ajouter host=)
Et il est probable qu'il fonctionne sur votre serveur local, parce que vous avez
mysql:localhost...
oumysql:127.0.0.1...
là et c'est ignorée (cause il manque host= aussi) et, par défaut, il localhost.OriginalL'auteur Michał Prajsnar
De la AOP page de manuel, vous pouvez voir que vous avez besoin d'envelopper la connexion dans un
try/catch
bloc. De cette façon, si quelque chose va mal avec la connexion, il vous le dira. Quelque chose comme ceci:La raison pour laquelle vous obtenez cette erreur est parce qu'il y a une erreur avec votre connexion, mais puisque vous ne dites pas à votre script s'arrête, il n'a pas. Regardez le message d'erreur produit, et comment résoudre le problème devrait être mise en évidence. Il semble que Michael Prajsnar réponse est bonne dans que vous n'êtes pas un "hôte".
Edit:
Comme il s'avère, PDO n'est pas se plaindre si vous laissez votre
host
oudbname
dans le PDO connexion DSN partie (au moins sur Unix). Je l'ai testé et le laisser vide par défaut "localhost" et j'ai donc été en mesure de se connecter parfaitement bien de quitter cette complètement pour les connexions localhost, ce qui expliquerait pourquoi il a travaillé sur votre serveur local, mais pas sur votre serveur de production. En fait, il est tout à fait possible de se connecter en fournissant absolument rien dans la source de données, sauf pour le moteur de base de données comme ceci:Le seul problème est qu'il ne sera pas à l'aide d'une base de données, donc à UTILISER une base de données, il suffit de faire:
Cependant, avec cela dit, j'ai des doutes que vous avez réellement essayé de connecter à l'aide d'un
try/catch
bloc (comme vous le mentionnez dans votre commentaire), à moins que vous en quelque sorte une pièce d'identifiants de base de données. La SEULE façon que cette façon de faire n'a pas de produire toute sorte d'erreur est de savoir si vous avez réellement connecté correctement et sélectionné la base de donnéeskennyi81_gamersite
. Si non, vous auriez vu un message comme ceci:En résumé, toujours envelopper votre connexion dans un
try/catch
bloc si vous voulez trouver des erreurs lors de la connexion. Assurez-vous juste de ne pas re-jeter (et pas l'attraper) lePDOException
'sgetMessage()
ou vous pouvez exposer vos informations de connexion.Voir mon edit
Laissant une exception non interceptée également dites-vous, ainsi que de déclencher une erreur fatale, l'empêchant ainsi la poursuite de l'exécution. Cette tendance à conseiller les développeurs pour attraper les exceptions et ne l'imprimer, le message semble être du PHP de la prochaine ronde de terribles conseils
Bon point. J'ai juste pris l'exemple de PHP.net. Bien sûr, vous pourriez faire ce que vous voulez tandis que la capture de l'erreur. J'ai mis à jour ma réponse pour refléter cela.
OriginalL'auteur Mike