[résolu] Tester si un evariable est bien une connexion Mysql ?

Tester si un evariable est bien une connexion Mysql ? [résolu] - PHP - Programmation

Marsh Posté le 09-05-2019 à 20:41:42    

Bonsoir,
 
Mon problème est simple : j'ai dans un fichier php des fonctions qui ont besoin d'une connexion mysql.  Je dois donc passer cette connexion dans une variable $connect, en argument de ma fonction.
 
Par contre, j'aimerais m'assurer (notamment à cause de présence de variables optionnelles qui peuvent faire que ma fonction est appelée avec 2 arguments au lieu de 4) que la première variable que je file en argument (non optionnelle elle, et destinée à être la connexion Mysql) est BIEN une connexion mysql, et pas un entier, parce que sinon le script s'exécute "normalement", sans erreur, et évidemment si l'objet donné en argument de la fonction est un entier ou n'importe quoi, ça ne marche pas du tout. Mais je n'ai pas d'erreur !
 
Comment faire pour tester en début de fonction si la variable $connect est bien une connexion mysql ? Je pensais m'en sortir avec gettype, mais cette dernière ne renvoie que "object", ce qui ne suffit pas (si le hasard fait que je l'appelle avec un autre objet, mon test ne le verra pas...)
 
Merci d'avance ! :jap:


Message édité par enuma le 10-05-2019 à 00:02:47
Reply

Marsh Posté le 09-05-2019 à 20:41:42   

Reply

Marsh Posté le 09-05-2019 à 23:59:09    

Lu,
 
le truc c'est que tu ne précises pas quelle extension tu utilises (PDO vs mysql - dépréciée/obsolète - vs mysqli).
 
Ensuite, il ne faut pas oublier que PHP dispose du type hinting (depuis PHP 5) sur les paramètres de fonction/méthode donc avec PDO et mysqli, vu que les connexions sont des instances, c'est facile à faire :
 
PDO :

Code :
  1. function truc(PDO $connexion, ...)


 
mysqli :

Code :
  1. function truc(mysqli $connexion, ...)


 
Si vraiment le typehinting n'est pas possible (paramètres "libres" ), il existe l'opérateur instanceof.
 
Et pour PDO, si tu voulais vraiment aller jusqu'à savoir que c'est bien une connexion MySQL et non PostgreSQL, SQLite, etc, un PDO::getAttribute(PDO::ATTR_DRIVER_NAME) devrait renvoyer le nom du pilote utilisé.


Message édité par pluj le 10-05-2019 à 00:02:40
Reply

Marsh Posté le 10-05-2019 à 00:00:47    

ah mais c'est cool ça, je ne savais pas qu'on pouvait faire ça ! Je suis sous PHP 7 et j'utilise mysqli, donc ce que tu me proposes me semble parfait ! Je vais tester tout de suite, merci.

 

Edit : c'est parfait, merci :jap:


Message édité par enuma le 10-05-2019 à 00:02:38
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed