IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Syntaxe pour (re)création d'une base [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Syntaxe pour (re)création d'une base
    Bonjour,

    Pour mes cours je dois passer par PHP pour ajouter, supprimer et modifier une base de données créée antérieurement.
    Je suis bloquée pour la syntaxe de mon script qui est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php 
    	$connexion =  mysql_connect('localhost','root','');
    			if(!$connexion) {
    				echo'erreur connexion my sql : ', mysql_error();
    			}
    	
    	$res = mysql_query('use tp_hopital');
    			if(!$res) {
    				echo'erreur res my sql : ', mysql_error();
    			}
    	$res = mysql_query('SET NAME utf8');
    	
    	$nom = $_REQUEST ['Nom'];
    	$numP = $_REQUEST ['NumP'];
    	$chambre = $_REQUEST ['Chambre'];
    	$dateA = $_REQUEST['dateA'];
    	
    	$sql=mysql_query("INSERT INTO patient(nomP, numP, numCH, dateA) VALUES (\''.$nom.'\',\''.$numP.'\',\''.$chambre.'\',\''.$dateA.';)"); 
    		  
    	$requete=mysql_query($sql); 
    			if(!$requete){
    				echo'erreur requete my sql : ', mysql_error();
    			}
    
    ?>
    Lorsque je fais le test dans le formulaire, j'ai une erreur en retour qui me dit que j'ai une erreur par rapport au Query qui serait vide ??
    J'ai essayé de modifier pour voir ce que ça faisait (mettre une virgule au lieu du point virgule, ne rien mettre... C'est toujours le même problème... )
    Merci de m'éclairer :)

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 043
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 043
    Points : 8 075
    Points
    8 075
    Billets dans le blog
    17
    Par défaut
    Ton script est mauvais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql=mysql_query("INSERT INTO patient(nomP, numP, numCH, dateA) VALUES (\''.$nom.'\',\''.$numP.'\',\''.$chambre.'\',\''.$dateA.';)");
    
    $requete=mysql_query($sql);
    Tu envoies le résultat de mysql_query( ) (ressource/booléen, cf. doc), à un autre mysql_query( ). mysql_query( ) n'accepte qu'une chaîne de caractères représentant une requête SQL.


    Astuce : pour un script plus clair et facilement débugable voilà comment je procède :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $sql = 'INSERT INTO patient(nomP, numP, numCH, dateA) '
         . 'VALUES("%s", "%s", "%s", "%s")' ; // Types à adapter selon besoins
     
    $sql = sprintf($sql, $nom, $numP, $chambre, $dateA) ; // Données à protéger avec mysql_real_escape_string( )
     
    $rs = mysql_query($sql) ;
     
    if ( $rs === FALSE ) { // Erreur ?
        echo '<p>', mysql_error( ), "</p><p>$sql</p>" ;
        // ...
    }
     
    // ...
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Une autre solution, qui n'a besoin d'aucune astuce, c'est utiliser PDO (ou MySQLi, Objet si possible) qui est tournée vers le futur alors que les fonctions mysql_truc_machin n'est plus maintenue, donc qu'on peu qualifier de pièce de musée.

    En utilisant PDO et en faisant des requêtes préparées, il n'y a plus à se prendre la tête à échapper les données, c'est géré automatiquement.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php
    // Connexion
    try {
        $options = array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
        );
        $dbh = new PDO('mysql:host=localhost;dbname=nom_de_la_bdd', 'root', '', $options);
    }
    catch (PDOException $e) {
        echo 'Erreur : '.$e->getMessage();
        exit();
    }
     
     
     
    try {
        $sth = $dbh->prepare('INSERT INTO patient(nomP, numP, numCH, dateA)
        VALUES(:nomP, :numP, :numCH, :dateA)');
     
        $sth->bindValue(':nomP', $nom, PDO::PARAM_STR);
        $sth->bindValue(':numP', $numP, PDO::PARAM_STR);
        $sth->bindValue(':numCH', $chambre, PDO::PARAM_STR);
        $sth->bindValue(':dateA', $dateA, PDO::PARAM_STR);
        $sth->execute();
    }
    catch (PDOException $e) {
        echo 'Erreur : '.$e->getMessage();
    }
    ?>
    Si tu préfères rester avec les fonctions mysql_*, apparemment il manque l'appel à la fonction mysql_select_db() pour sélectionner la Bdd où sera exécuté les requêtes.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 043
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 043
    Points : 8 075
    Points
    8 075
    Billets dans le blog
    17
    Par défaut
    il manque l'appel à la fonction mysql_select_db()
    Bien vu.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Une autre solution, qui n'a besoin d'aucune astuce, c'est utiliser PDO (ou MySQLi, Objet si possible)
    Oui enfin le mode procédural de mysqli possède les même propriétés que le mode objet. C'est plus par homogénéité avec le reste du code qu'on peut préférer le mode objet.
    Je dis cela pour ne pas décourager d'utiliser mysqli en mode procédural car c'est parfois un excellent moyen de migrer de mysql vers mysqli à peu de frais puisque la syntaxe est presque identique (faut juste parfois modifier l'ordre des paramètres et certains deviennent obligatoires).

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 163
    Points : 45
    Points
    45
    Par défaut
    Justement existe t'il une marche à suivre pour passer de mysql à mysqli:
    - au niveau de code PHP
    - au niveau de mysql

  7. #7
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    pour le passage de mysql à mysqli procédural... aucun traumatisme, c'est quasi ment la même syntaxe c'est d'ailleurs pensé pour

    pareil pour passer de mysqli objet à PDO...

    perso je te conseille de directement passer à PDO qui est multi SGBD et langage vu que tu le retrouves implémenté en C/C++ notamment...

    la programmation objet te laisse le choix de te créer un connecteur sur mesure laissant apparaitre plus ou moins de méthodes selon que tu utilises l'héritage ou une encapsulation dans une classe maison

    déjà tu utilises PDO directement pour faire ce que tu as besoin et te faire la main... ensuite selon tes connaissances en programmation objet tu encapsules ou dérive les appels à PDO dans une classe qui simplifiera l'écriture de ton code ensuite...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 163
    Points : 45
    Points
    45
    Par défaut
    Merci pour la réponse.
    J'ai peur que l'effort pour passer à pdo soit plus grand que celui pour passer à mysqli ...

  9. #9
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    non mais tu peux utiliser d'abord mysqli en mode procédural...

    puis ça sera très simple de passer au mode objet et ensuite avec quasiment pas de modifications à PDO

    fais comme ça si tu veux prendre le temps mais attention à ne pas mélanger les 3 extensions dans ton code quand tu fais les transitions car elles ne sont pas compatibles

    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 163
    Points : 45
    Points
    45
    Par défaut
    Merci. Donc première étape, en gros, remplacer mysql par mysqli et vérifier si l'ordre des paramètres est le même.
    Rien à faire côté my.ini ?

  11. #11
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    c'est transparent pour mysql, ça ne joue que coté php vu que se sont des extensions pour lui
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    il n'y a qu'a voir le tableau des "prédictions" de php, mysqli va être abandonné au profit de PDO très rapidement ( cela dit nous parlons de version possible tenue à jour , donc avec un noyau qui tienne la route ) , comme tu a le choix pourquoi ne pas faire kklque chose de stable avec PDO directement. De plus cela te permettra de passer directement en mode "facile" à sécuriser, qui plus est le plus rapide, et recommandé
    Conception / Dev

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 163
    Points : 45
    Points
    45
    Par défaut
    Il y a donc aussi des modifs à faire dans php.ini !
    Comme je l'ai dit cela me fait peur de passer en une fois de mysql à pdo.
    Justement je voulais par la même occasion avoir une connexion ssl. Cela doit se faire aussi avec mysqli, pas seulement avec pdo ?

    Je suis sous windows, quoi d'autre vérifier ?
    - IIS ?

  14. #14
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    mais non

    ascito te parle des prévisions d'évolution de php...

    les 3 sont des extensions qui sont activées de base mais tu peux vérifier dans php.ini ou, dans php, avec:

    le seul truc c'est juste de voir la nouvelle syntaxe, pas compliquée du tout, qui fait la même chose...
    ce n'est que de la réécriture en php, y a plein d'exemple dans la doc c'est pas dur...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  15. #15
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    De toutes les façons, c'est qd même mieux si on a le temps de s'attaquer à PDO (Php Data Object) car beaucoup d'ORM (Object Relational Mapping) se base dessus (Hibernate pour Java) (Doctrine, Propel pour Php) un jour tu en auras besoin
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [11g] Besoin d'aide pour la création d'une base de données
    Par Youssef.ben dans le forum SQL
    Réponses: 1
    Dernier message: 08/06/2015, 13h46
  2. Conseil pour la création d'une base de données
    Par ninouee dans le forum Débuter
    Réponses: 4
    Dernier message: 28/09/2014, 14h10
  3. idées pour la création d'une base de données ?
    Par sephiroth669 dans le forum Access
    Réponses: 3
    Dernier message: 22/03/2010, 19h43
  4. Syntaxe pour fonction de Connexion à une base
    Par fbe66 dans le forum VB.NET
    Réponses: 2
    Dernier message: 02/09/2009, 12h43
  5. Réponses: 4
    Dernier message: 22/09/2004, 10h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo