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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    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
    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 confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    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>" ;
        // ...
    }
     
    // ...

  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
    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.

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    il manque l'appel à la fonction mysql_select_db()
    Bien vu.

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    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 418
    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 confirmé
    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
    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
    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...

+ 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, 12h46
  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, 13h10
  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, 18h43
  4. Syntaxe pour fonction de Connexion à une base
    Par fbe66 dans le forum VB.NET
    Réponses: 2
    Dernier message: 02/09/2009, 11h43
  5. Réponses: 4
    Dernier message: 22/09/2004, 09h17

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