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 :

Ma premiere requete MySQLi [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut Ma premiere requete MySQLi
    bonjour,

    j'ai fait ma 1ere requete MySQLi en POO, ca marche pas, je ne me suis pas habitue a le faire:

    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
     
    <?php
    include 'connect.php';
     
    $mysqli = new mysqli($db_host, $db_user, $db_passwd);
     
    if ($mysqli->connect_error) {
        die('Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
    }
     
    $mysqli->set_charset("utf8");
     
    $db = $mysqli->select_db($db_name);
     
    $query = 'SELECT id_gp1, spg_name_ar FROM users_sgroups';
     
    /* determine number of rows result set */
    $row_cnt = $query->num_rows;
    echo 'nbre: '.$row_cnt;    
     
    if ($stmt = $mysqli->prepare($query)) {
     
    	/* execute query */
        $stmt->execute();
     
    	/* bind result variables */
        $stmt->bind_result($id_gp1, $spg_name_ar);
     
        /* fetch values */
        while ($stmt->fetch()) {
            echo $id_gp1l.'<br>';
    		echo $spg_name_ar.'<br>';
        }
     
        /* close statement */
        $stmt->close();
    }
     
     
    $mysqli->close();
    ?>
    merci pour votre aide

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    quelle est l'erreur ?
    pour la gestion des erreurs avec mysqli c'est mysqli_report

    a mettre sur :
    - MYSQLI_REPORT_ALL en POO
    - MYSQLI_REPORT_ALL & ~MYSQLI_REPORT_STRICT en procédural

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    quelle est l'erreur ?
    pour la gestion des erreurs avec mysqli c'est mysqli_report

    a mettre sur :
    - MYSQLI_REPORT_ALL en POO
    - MYSQLI_REPORT_ALL & ~MYSQLI_REPORT_STRICT en procédural

    Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'No index used in query/prepared statement SELECT id_gp1, sgp_name_ar FROM users_sgroups' ligne 26
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	/* execute query */
        $stmt->execute();

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    ton code est en procédurale (même si tu utilise mysqli en POO), met la 2eme option pour l'erreur, active les erreurs de PHP aussi met le niveau au maxium (E_ALL | E_STRICT ou -1)

    puisque le code suivant te génère une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = 'SELECT id_gp1, spg_name_ar FROM users_sgroups';
    $query->num_rows;

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    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
    error_reporting(E_ALL);
     
    include 'connect.php';
     
    /* Active le rapport d'erreur mysqli */
    mysqli_report(MYSQLI_REPORT_ALL);
     
    $mysqli = new mysqli($db_host, $db_user, $db_passwd);
     
    if ($mysqli->connect_error) {
        die('Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
    }
    else
    {
    	echo 'connected';
    }
     
    $mysqli->set_charset("utf8");
     
    $db = $mysqli->select_db($db_name);
     
    $query = 'SELECT id_sgp, sgp_name_ar FROM users_sgroups';
     
    $query->num_rows;
     
    ?>
    l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Notice: Trying to get property of non-object in index4.php on line 25

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    $query est du type string je vois pas ce que t'attends en faisant : $query->num_rows

  7. #7
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    un essai avec une class:

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    <?php
    include 'connect.php';
     
    mysqli_report(MYSQLI_REPORT_ERROR);
     
     
    class Connexion {
     
    	public function __construct($db_host='', $db_user='', $db_passwd='')
    		{
    			$this->db_host = $db_host;
    			$this->db_user = $db_user;
    			$this->db_passwd = $db_passwd;
    			$this->connexion = $connexion;
     
    			$this->connexion = new mysqli($db_host, $db_user, $db_passwd); //HOST, USER, PASSWORD
     
    				if ($mysqli->connect_error) 
    					{
     						die('Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
    					}
     
    	if (!$this->connexion->set_charset("utf8")) {
        printf("Error loading character set utf8: %s\n", $this->connexion->error);
    } else {
        printf("Current character set: %s\n<br>", $this->connexion->character_set_name());
    }
     
       }
     
     
    	public final function db_name($db_name) //DBNAME
    		{
    			$this->db_name = $db_name;
    			if(!$this->connexion->select_db($this->db_name))
    			{
    				echo 'db not select<br>';
    			} 
    		}
     
     
    	public final function select() //$fields, $table_name
    		{
    			$this->select = $select;
    			$this->resultat = $resultat;
    			$this->smt = $smt;
     
    			$this->select = "SELECT id_sgp, sgp_name_ar FROM users_sgroups";
    			echo $this->select.'<br>';
    			$this->resultat = $this->connexion->query($this->select);
     
    			$this->smt = $this->connexion->prepare($this->select);
     
    			$this->smt->execute();
     
    		}
     
     
    	public final function num_rows()
    		{
    			/* determine number of rows result set */
    			$row_cnt = $this->smt->num_rows;
    			echo 'nbre: '.$row_cnt;
    		}
     
    	public final function display_Results()
    		{
     
    			$this->smt->bind_result($id_sgp, $sgp_name_ar);
            	$this->smt->fetch();
    			echo 'sgp: '.$id_sgp;
    		}
     
    }
     
     
    $r = new Connexion($db_host, $db_user, $db_passwd);
    $r->db_name('test');
    $r->select();
    $r->num_rows();
    $r->display_Results();
     
    ?>
    il retourne nbre: 0

  8. #8
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    c'est quoi la difference entre prepare et execute?

  9. #9
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 417
    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 417
    Par défaut
    Ben ça veux dire la même chose qu'en français. Tu vois pas la différence entre préparer et exécuter ?

  10. #10
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Ben ça veux dire la même chose qu'en français. Tu vois pas la différence entre préparer et exécuter ?
    ce qui m'etonnait je les ai vu toutes les 2 dans des tutos, alors je me suis pose la question

  11. #11
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    donc je considere ces 2 lignes comme la meme chose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if ($stmt = $mysqli->prepare($query)) {
     
    	/* execute query */
        $stmt->execute();

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    prepare + execute te sert a faire des requete préparer, query des requêtes simple

    t'as requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id_gp1, id_sgp, sgp_name_ar FROM users_sgroups
    n'as pas besion de prepare puisque qu'il n'y a aucune valeur de parametre, un query suffit

    une requete préparé trouve tout son intérêt lors d'INSERT multiple par exemple

  13. #13
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    je les considere (prepare, execute) par exemple le cas d'INSERT, UPDATE, DELETE.., sans prendre en compte SELECT?

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par isitien Voir le message
    je les considere (prepare, execute) par exemple le cas d'INSERT, UPDATE, DELETE.., sans prendre en compte SELECT?
    pas forcement, tu ne sais pas ce qu'est une requete préparée ?

  15. #15
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    pas forcement, tu ne sais pas ce qu'est une requete préparée ?
    c'est ce que je cherche a savoir: prepare, execute

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

Discussions similaires

  1. [debutant..] Requeter les premieres lignes
    Par cciocc dans le forum Access
    Réponses: 3
    Dernier message: 17/05/2006, 22h18
  2. Réponses: 2
    Dernier message: 28/04/2006, 22h56
  3. Requete pour obtenir les 25 premiers enregistrement
    Par dbizier dans le forum Oracle
    Réponses: 1
    Dernier message: 28/04/2006, 21h36
  4. [MySQL] requete sur la premiere lettre
    Par hugo69 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 17/03/2006, 21h16
  5. [REQUETE] Paramètre "Premier"
    Par superseba888 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 22/10/2005, 00h20

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