Aller à la page... |
Communication avec une base de donnée MySQL
Suivre Répondre |
|
Partager | Rechercher |
Alpha & Oméga
|
Le message " "erreur de connexion à la base de donnée""
qui t es retourné vient de la page PHP , par la ligne PHP $msgerr1 = "erreur de connexion à la base de donnée"; .... $link = mysqli_connect( 'localhost' ,'Admin','MDP','NomDB' ); if(!$link) die ($msgerr1) Donc la connexion web semble fonctionner . Et ton problème est un problème d identification à ta base de données . Une première piste à vérifier est d abord de vérifier les identifiants de connexion utilisés par ta page PHP qui sont renseignés en paramètres de la fonction à la ligne : $link = mysqli_connect( 'localhost' ,'Admin','MDP','NomDB' ); 1) le paramètre avec la valeur "localhost" présume que ton serveur php est sur la même machine que la machine sur laquelle se trouve ton serveur mysql . Si ce n est pas le cas , change le dans la page PHP 2) le paramètre avec la valeur "NomDB"présume que une des bases de données que disposent ton serveur mysql s appelle "NomDB" Pour le vérifier , va sur la machine où se trouve ton serveur mysql , en ouvrant une console en ligne de commandes Connecte toi en en tapant la commande : mysql -u root -p On t affichera : Enter password: Tape ton mot de passe si tu en as renseigné un créant ton serveur mysql (ou la touche entrée si tu n as pas voulu le renseigner ) On t affichera Welcome to the MySQL monitor. Commands end with ; ( du blabla pui le prompt ) mysql> tape la commande show databases; On t affichera +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | madatabaseperso | etc .... Les 3 bases de données information_schema , mysql, performance_schema sont plutôt des bases de données pour le fonctionnement interne de mysql . Regarde donc les autres noms de base de données : Regarde si le nom de ta base de donnée y est et te semble familier . Puis édite ta page PHP avec ce nom par exemple si ta base de données est "madatabaseperso" , tu rechangeras ta page PHP par $link = mysqli_connect( 'localhost' ,'Admin','MDP','madatabaseperso' ); 3) le paramètre avec la valeur "Admin" et "MDP" présume que un utilisateur nommé "Admin" existe et que son mot de passe est "MDP" Pour le vérifier , va sur la machine où se trouve ton serveur mysql , en ouvrant une console en ligne de commandes Connecte toi en en tapant la commande : mysql -u root -p On t affichera : Enter password: Tape ton mot de passe si tu en as renseigné un créant ton serveur mysql (ou la touche entrée si tu n as pas voulu le renseigner ) On t affichera Welcome to the MySQL monitor. Commands end with ; ( du blabla pui le prompt ) mysql> tape la commande select user, host, password from mysql.user; On t affichera par exemple +------------------+--------------+--------------+ | user | host | password | +------------------+--------------+--------------+ | root | localhost | 37as%#8123fs | | debian-test-user | localhost | HmBEqPjC5Y | | johnsm | localhost | | | adrianr | 10.11.12.13 | RFsgY6aiVg | Les mots de passe sont cryptés, mais si ils ne sont pas renseignés , comme par exemple dans la ligne "johnsm" , cela veut dire que tu n as pas besoin de renseigner le mot de passe das ta page PHP pour te connecter à la base de données Modifie ta page PHP en conséquence .Dans l exemple ci dessus , si ton utilisateur est en fait johnsm modifie ta page PHP en ramplacant cette ligne et en laissant vide le 3ème paramètre réservé pour le mot de passe: $link = mysqli_connect( 'localhost' ,'johnsm','','madatabaseperso' ); La colonne host a aussi son importance : pour le cas de "adrianr" ci dessus , cela veut dire que e serveur mysql n acceptera que des connections d un utilisateur nommé "adriansr" mais se connectant avec ce nom ou cette adresse IP Modifie ta page PHP en conséquence . Dans l exemple ci dessus , si ton utilisateur est en fait adrianr modifie ta page PHP pour remplacer "Admin" par "adriansr" et "localhost" par "10.11.12.13" $link = mysqli_connect( '10.11.12.13' ,'adriansr','','madatabaseperso' ); Tout ceci peut se faire aussi plus simplement si tu as dans ton ensemble serveur php / serveur www / serveur mysql d autre packeges du style phpmyadmin ou admirer ( https://www.adminer.org/en/phpmyadmin/ ) ou sdlbuddy ou autres qui fournissent une page web uniquement accessible en local sur ta machine et qui peut administrer les utilisateurs et les bases de données de ton serveur mysql D autre part , , c est HS puisque ton problème est un problème de connexion , mais comme cela reste dans le cadre des permissions d utilisateurs de base de données ta page PHP fait plus tard après la connexion un "select" , un "update", et un "insert . Il faudra donc vérifier que ton utilisateur de base de données peut éxécuter ce type d ordres ordres/commandes SQL Tu peux taper la commande mysql : SELECT User, Host, Password ,select_priv, insert_priv, update_priv FROM mysql.user; qui t affichera les utilisateurs pouvant répondre à ce critère . Si ta page PHP ne faisait que plusieyrs ordres "select" , un utilistauer qui dans la colonne select_priv a la valeur "Yes" , et "No" dans les colonnes "insert_priv" et "update_priv " pourrait répondr eà cet autre critère 4) si malgré tout cela , tu ne te rappelles pas de tes identifiants de connexion , c est raté . Tu peux éventuellement créer un autre utilisateur de base de donnée avec son mot de passe et ses permissions ("grants" ) Dans mysql tapes la commande CREATE USER 'tartanpion'@'localhost'; Cela créera l utilisateur de base de données mysql avec le nom "tartampion" se connectant à partir de la machine "localhost" Puis donne les permissions à cet utilisateur Dans ton cas , ta page PHP ne fait que des insert , des selects et des update GRANT SELECT, INSERT , UPDATE ON mabasededonnesperso.* TO 'tartampion'@'localhost' IDENTIFIED BY 'HmBEqPjC5Y '; Ce qui veut dire "donne les permission de select , insert , update sur toutes les tables ( à cause du ".*" ) de la base de données nommée "mabasededonnesperso" à l utilisateur nommé "tartampion" et qui se connecte avec le mot de passe "HmBEqPjC5Y " Si tu fais une autre page PHP avec des ordres "delete", il te faudra faire la même commande mais avec cette fois ci , en rajoutant les permissions de "delete" GRANT SELECT, INSERT , UPDATE ON mabasededonnesperso.* TO 'tartampion'@'localhost' IDENTIFIED BY 'HmBEqPjC5Y '; en supposant que ta ligne dans ta page PHP se connecte par $link = mysqli_connect( 'localhost' ,'tartampion','HmBEqPjC5Y ','mabasededonnesperso' ) Si tu veux créer un utilisateur ayant toutes les permissions sur ta base de données ( donc y compris créer des tables et les droper ) GRANT ALL ON mabasededonnesperso.* TO 'tartampion'@'localhost' IDENTIFIED BY 'HmBEqPjC5Y '; C est mieux de limiter au juste nécessaire plutôt que de donner toutes les permissions Tu peux voir la syntaxe sur le site officiel de mysql à cette page , pour d autres permissions que tu voudrais rajouter au besoin https://dev.mysql.com/doc/refman/8.0/en/grant.html 5) si tu as besoin de créer une autre base de données alors tu saisis dans mysql CREATE DATABASE mabasededonnesperso; Il va falloir aussi activer ta base de données par la commande USE mabasededonnesperso; Si tu oublies la commande USE , la base de données n est pas accessible 6) si tu te rappelles de tes identifiants de connexion, qu ils sont correct et en phase avec ceux de ta page PHP ( nom de la base de donnée , nom ou IP de la machine , nom d utilisateur ), mais que tu as oublié ton mot de passe alors tu peux rechanger le mot de passe : update mysql.user set authentication_string=password('NEWPASSWORD') where user='tartampion'; flush privileges; dans l exmple où l utilisateur se connectant à mysql et existant dans la base de données , et que tu as renseigné dans ta page PHP s appelle tartanmpion 7) il est possible , je ne sais pas si c est ton cas , que tu lances ton serveur mysql avec un fichier d options ( des fichiers .ini , ou des fichiers .cnf ) . Ce fichier d options peut aussi rassembler des identifiants de connexion. Si c est le cas , cela peut t aider peut être à retrouver tes identifiants de connexion et de changer ta page PHP en rapport avec ceux ci . Il te faudra jouer avec le programme musql_config_editor Dernière modification par redpurple ; 24/05/2018 à 02h28. |
24/05/2018, 00h35 |
|
|
Suite à toutes ses explications , j'ai recontrôlé et j'ai trouvé mon erreur.
Mon problème de connexion à la base de donnée venait d'une faute de frappe entre le code de ma page PHP et le nom d’appellation de ma base... J'en ai profité pour contrôler que l'utilisateur de la base de donnée possède bien tous les privilèges: Mais bon , je n'ai pas complètement solutionné mon souci Maintenant , il me retourne le message de la variable $msgerr2 = "erreur de connexion à la table"; Code PHP:
Image console raspberry: Image du panneau de la database sur PHPMyAdmin: Je pense que je me trompe sur la façon de sélectionner la table. Dernière modification par RLP Ghost ; 27/05/2018 à 10h00. |
27/05/2018, 09h23 |
|
Bonjour,
La fonction mysqli_select_db sert à changer la base de données par défaut pour la connexion courante, le deuxième paramètre est le nom de la base, pas celui d'une table. Tu gagnerais peut-être du temps en utilisant un framework, même léger pour simplifier la syntaxe. |
27/05/2018, 09h41 |
|
|
Salut bestmomo ( Merci encore pour les guides que tu as put faire à l’époque , c'est un peu grâce à toi que j'ai commencer à coder le LSL )
Donc je suis à coté de la plaque avec la fonction que j'utilise pour sélectionner ma table. Je ne vois pas de quoi tu parle en terme de framework. Pourrais-tu m'orienter ? Bon sinon enfin , je suis parvenu à enregistrer des informations dans ma table , plusieurs erreurs de code: Toute la partie du code avec mysqli_select_db qui servait à rien sauf à me (die) mon script php. La fonction mysqli_query où je ne rappelais pas la variable de connexion à la database $link Code PHP:
j'ai encore des améliorations de format à faire car produit='".$vers."' et version='".$prod."' , c'est inversé. Maintenant , j'ai une base de code qui va me permettre d'avancer sur mon projet. Je reviendrai certainement vous poser quelque question pour la suite. Merci pour tous Dernière modification par RLP Ghost ; 27/05/2018 à 11h15. |
27/05/2018, 10h08 |
|
En ce qui concerne les frameworks PHP c'est juste pour se simplifier la vie et éviter du codage de bas niveau. Personnellement pour les API j'utilise Lumen qui possède de bons outils de gestion de bases de données, en particulier l'ORM Eloquent.
|
27/05/2018, 12h37 |
|
|
Citation :
|
27/05/2018, 14h31 |
|
|
|
27/05/2018, 15h31 |
|
Alpha & Oméga
|
Mmoui .. Passer par un framework pourquoi pas . Ceci dit je doute que la taille des tables soit si grosse ou que la base de donnée soit si complexe . Apparemment il n y a qu une seule table qui ne devrait même pas être très volumineuse et seulement 2 ou 3 colonnes
Peut etre même qu une page PHP qui decode un fichier texte CSV ou un fichier texte Json aurait pu suffire sans avoir besoin d utiliser une base de données. Si la taille des données ne fait que quelques centaines de kilo octets c est peut etre plus pratique sans avoir de ralentissement de la page |
27/05/2018, 15h41 |
|
|
Oui c'est sûr que s'il n'y a pas de données relationnelles l'utilisation d'une base paraît excessive...
|
27/05/2018, 16h52 |
|
|
Vous avez complètement raison.
Mon manque de connaissance m'oblige certainement à passer par ce système de stockage d'information pas forcement nécessaire au fonctionnement de mon produit final. Comme on dit système D. La magie du script , c'est toujours de contourner les problèmes par une autre façon de coder. L'optimisation est dans la maîtrise des différents langages. Le LSL , je peux encore faire un effort par le nombre d'années où j'ai coder grâce à vous ( Ahuri , Lancelot (Magic Cat ) , Bestmomo ) mais le PHP et le MySQL sont comme pour moi du chinois |
27/05/2018, 22h26 |
|
|
C'est pas les cours qui manquent sur le sujet
|
27/05/2018, 22h56 |
|
Suivre Répondre |
Fil d'ariane
Connectés sur ce fil1 connecté (0 membre et 1 invité)
Afficher la liste détaillée des connectés
|