Je cherche un moyen de tester la partie de connexion d'une connexion PHP / mysqli. Je migre d'un serveur de lampe construit sur Vista à la même chose sur Ubuntu et que je suis convivial pour que MySQLI fonctionne. Je sais que tous les modules appropriés sont installés et que phpmyadmin fonctionne parfaitement. J'ai migré un site et aucune des connexions MySQLI ne fonctionne. L'erreur que je reçois est l'appel "Appel à la fonction membre xxx () sur le non-objet" qui apparaît généralement lorsque la requête elle-même est mauvaise ou que la requête est préparée à partir d'une mauvaise connexion. Je sais que la requête elle-même est bonne car cela fonctionne bien sur l'autre serveur avec la même structure et les mêmes données de base de données. Cela me laisse avec la connexion. J'ai essayé d'écrire une connexion de test très simple et de la mettre dans une boucle telle que .. echoes "connecté", ce qui est génial. Mais juste pour vérifier, j'ai changé le mot de passe dans la connexion afin que je sache que cela ne puisse pas être en mesure de se connecter et qu'il a toujours fait écho "connecté". Donc, le test if / sinon n'est clairement pas la voie à suivre ... p> p>
3 Réponses :
mySQLI_Connect () retourne toujours un objet MySQLI. Pour vérifier les erreurs de connexion, utilisez:
Cela a fonctionné. Merci, Lek. Bien sûr, cela ne comprenait que le mystère. Je sais maintenant que la base de données se connecte en fait, ce qui signifie que mon script crache réellement le peu de la requête elle-même. Cela a encore moins de sens que la requête elle-même fonctionne sur d'autres serveurs. J'ai même écrit une simple requête de test qui, malheureusement, retourne toujours l'erreur de non-objet.
else {écho "connecté". } ajouter ;
Vous avez besoin de plus de traitement des erreurs sur les différents appels de base de données, puis. La méthode rapide / sale est de simplement faire
$result = $mysqli->query("blah blah will cause a syntax error"); $data = $result->fetchRow(); // $result is "FALSE", not a mysqli_object, hence the "call to member on non-object"
mourir je suis toujours mauvais. Au moins Envoyer 503 Statut et Jamais B> révéler toutes les informations sensibles telles que MySQL Message d'erreur. Utilisez TRGGER_ERROR () à la place. Bien que cela soit assez inutile ici, comme le message d'erreur PHP est déjà assez informatif, le cas échéant
En fait, j'ai essayé d'utiliser quelque chose de similaire, uniquement avec mysqli_connect_error (), il ne jette pas une erreur.
Pour tester la connexion PHP dans votre terminal Execute:
$ php -r 'var_dump(mysqli_connect("localhost:/tmp/mysql.sock", "MYSQL_USER", "MYSQL_PASS", "DBNAME));'
Pouvez-vous s'il vous plaît montrer comment vous faites la connexion ici i> b> (vous pouvez laisser l'utilisateur et le mot de passe)?
"Appel à la fonction membre xxx () sur l'erreur de non-objet" n'a rien à voir avec la connexion de base de données.
Veuillez lire: Devrissons-nous jamais vérifier manuellement les erreurs MySQLI_Connect ()?