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 :

Requêtes SQL ne marchent pas [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    hahahaha
    Inscrit en
    Avril 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : hahahaha

    Informations forums :
    Inscription : Avril 2013
    Messages : 61
    Par défaut Requêtes SQL ne marchent pas
    Bonjour,

    J'ai un problème avec les requêtes SQL pour créer une base de données ou bien si je le fais manuellement dans phpMyAdmin, je ne peux ni mettre la table à jour, ni faire une requête de sélection, rien ne marche.

    Voici mon code :

    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
    <?php 
    try{
    	include("connect.inc.php"); 
    	$connexion = new PDO("mysql:host=$host;dbname=$dbname", $login, $password);
    		echo"<p> Connexion réussie</p>\n";
    			$sql="CREATE TABLE MATIERE(codemat VARCHAR(3) PRIMARY KEY,libelle VARCHAR(20),coef FLOAT)";
    				$res=$connexion->exec($sql);
    					if ($res===FALSE)echo("La requête à échouée");
    					else echo("Requête exécutée avec succès");
     
    			$sql1="INSERT INTO MATIERE Values('STA','Statistiques',0.4),('INF','Informatique',0.4),('ECO','Econométrie',0.2)";
    				$res1=$connexion->exec($sql1);
    				echo"<p>Vous avez inséré $res1 n-uplets</p>";
     
    				if ($res1===FALSE)echo("<p>La requête à échouée</p>");
     
    			$sql2="SELECT codemat from MATIERE";
    				$res2=$connexion->query($sql2) or die(print_r($connexion->errorInfo()));;
    					echo "<ul>\n";
    					foreach($res2 as $l){
    						echo "<li>". $l["codemat"] . "</li>\n"; echo "</ul>\n";
    						echo "<p>" . $res->rowCount() . " résultat(s)</p>\n";
    						}
     
     
    }catch (PDOException $erreur) {
    	echo "<p>Erreur : " . $erreur->getMessage() . "</p>\n";
    };
    Quand je lance ma page dans mon navigateur, j'obtiens "connexion réussie
    la requête à échouée
    vous avez inséré n-uplets
    la requête à échouée Array ( [0] => 3D000 [1] => 1046 [2] => No database selected ) 1"

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    ça ne peut fonctionner que si la table MATIERE n'existe pas déjà.
    Comme ça :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE IF NOT EXISTS MATIERE...
    Un conseil pour la définition de table, créé la table manuellement, ensuite recopie la DDL de cette table et code le PHP de manière à ce qu'il y soit identique.

    J'ai repris ton code
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
     
    try
    {
        include 'connect.inc.php'; 
        $pdo = new PDO("mysql:host=$host;dbname=$dbname", $login, $password);
        echo '<p> Connexion réussie</p><br />';
     
        $sql =
    <<<'SQL'
    CREATE TABLE IF NOT EXISTS MATIERE (
        codemat VARCHAR(3)  PRIMARY KEY NOT NULL,
        libelle VARCHAR(20),
        coef    FLOAT(9,3)
    )
    SQL;
     
        $res = $pdo->exec($sql);
        if ($res === false)
            echo 'La requête à échouée';
        else
            echo 'Requête exécutée avec succès';
     
        $sql1 =
    <<<'SQL'
    INSERT INTO MATIERE VALUES
        ('STA', 'Statistiques', 0.4),
        ('INF', 'Informatique', 0.4),
        ('ECO', 'Econométrie', 0.2)
    SQL;
     
        $res1 = $pdo->exec($sql1);
        echo "<p>Vous avez inséré {$res1} n-uplets</p>";
     
        if ($res1 === false)
            echo('<p>La requête à échouée</p>');
     
        $sql2 = 'SELECT codemat from MATIERE';
        $res2 = $pdo->query($sql2) or die(print_r($pdo->errorInfo()));;
        echo "<ul>\n";
     
        foreach ($res2 as $l)
        {
            echo
    <<<HTML
        <li>{$l["codemat"]}</li>
    </ul>
    <p>{$res->rowCount()} résultat(s)</p>
    
    HTML;
        }
    }
    catch (PDOException $erreur)
    {
        echo "<p>Erreur : " . $erreur->getMessage() . "</p>\n";
    };
    Rien testé alors croisage des doigts

  3. #3
    Membre confirmé
    Homme Profil pro
    hahahaha
    Inscrit en
    Avril 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : hahahaha

    Informations forums :
    Inscription : Avril 2013
    Messages : 61
    Par défaut
    Merci pour ta réponse, j'ai essayé de juste rajouter 'if not exist" dans mon code de base, cela ne change rien, j'ai aussi recopié ton code mais j'ai exactement la même chose, je précise que j'ai déjà essayé de créer la base en SQL dans phpMyAdmin et d'ajouter des valeur, même la requête de sélection ne renvoie rien alors qu'il y a pourtant des valeurs dans la table...

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Laisse tomber je suis une chèvre :
    $pdo->query() renvoie un PDOStatement.
    Essaie avec ceci :
    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
        $sql2 = 'SELECT codemat FROM MATIERE';
        $res2 = $pdo->query($sql2) or die(print_r($pdo->errorInfo()));;
        echo "<ul>\n";
     
        $i = 0;
        while ($row = $res2->fetch(PDO::FETCH_ASSOC)    
        {
            ++$i; // compteur d'enregistrements
            echo
    <<<HTML
        <li>{$row['codemat']}</li>
    HTML;
        }
        echo 
    <<<HTML
    </ul>
    <p>{$i} résultat(s)</p>
    HTML;
    Ensuite pour savoir quelle requête échoue tu dois insérer un signe distinctif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo 'La requête de création a échoué';
    echo "La requête d'insertion a échoué";

  5. #5
    Membre confirmé
    Homme Profil pro
    hahahaha
    Inscrit en
    Avril 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : hahahaha

    Informations forums :
    Inscription : Avril 2013
    Messages : 61
    Par défaut
    Ca ne marche pas non plus :/ j'obtiens ca :

    "Connexion réussie

    La requête de création à échouée
    Vous avez inséré n-uplets

    La requête d insertion à échouée

    Fatal error: Call to a member function query() on line 1"

    Sinon juste une précision c'est quoi "la DDL" dans ta réponse précédente ?

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Poste le code de connect.inc.php histoire de voir si la connexion peut être établie
    DDL = data definition language
    J'ai testé et le code de création est valide.

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

Discussions similaires

  1. Requête SQL ne marche pas sur SQL Server
    Par phpieur dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/05/2007, 13h24
  2. [requête SQL] INNER JOINT pas maîtrisé
    Par camzo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 10/04/2007, 18h59
  3. [MySQL] Ma requête SQL ne fonctionne pas
    Par fabrice88 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/01/2007, 12h41
  4. Pourquoi cette requête SQL ne marche pas toujours
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 14/12/2006, 17h29

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