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

  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 autre 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
     
    <?php
    include 'connect.php';
     
    /* Active le rapport d'erreur mysqli */
    mysqli_report(MYSQLI_REPORT_ALL);
    error_reporting(E_ALL);
     
    $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_sgp, sgp_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_sgp, $sgp_name_ar);
     
        /* fetch values */
        while ($stmt->fetch()) {
            echo $id_sgp.'<br>';
    		echo $sgp_name_ar.'<br>';
        }
     
        /* close statement */
        $stmt->close();
    }
    else
    {
    	echo 'ohoooooooo';
    }
     
     
    $mysqli->close();
    ?>
    l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'No index used in query/prepared statement SELECT id_sgp, sgp_name_ar FROM users_sgroups' in index.php:27 Stack trace: #0 index.php(27): mysqli_stmt->execute() #1 {main} thrown in index.php on line 27
    ca veut dire quoi cette erreur

  8. #8
    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
    c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error_reporting(E_ALL | E_STRICT);
    mysqli_report(MYSQLI_REPORT_ALL & ~MYSQLI_REPORT_STRICT);
    t'as requete préparer sert a rien puisque tu ne "prépares" rien, utilise juste query

  9. #9
    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
     
    Warning: mysqli::query() [mysqli.query]: (00000/0): No index used in query/prepared statement SELECT id_sgp, sgp_name_ar FROM users_sgroups in ndex.php on line 28
    le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $db = $mysqli->select_db($db_name);
     
    $query = 'SELECT id_sgp, sgp_name_ar FROM users_sgroups';
    /* Requête "Select" retourne un jeu de résultats */
     
    $result = $mysqli->query($query);

  10. #10
    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
    t'as pas d'index dans ta table ?

  11. #11
    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
    t'as pas d'index dans ta table ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TABLE IF NOT EXISTS `users_sgroups` (
      `id_sgp` int(2) unsigned NOT NULL auto_increment,
      `id_gp1` enum('1','2','3') collate utf8_unicode_ci NOT NULL,
      `sgp_name_ar` varchar(50) collate utf8_unicode_ci NOT NULL,
      `sgp_name_en` varchar(50) collate utf8_unicode_ci NOT NULL,
      PRIMARY KEY  (`id_sgp`),
      KEY `id_gp1` (`id_gp1`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=43 ;
    id_gp1 INDEX None Edit Drop id_gp1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = 'SELECT id_sgp, id_gp1, sgp_name_ar FROM users_sgroups';
    le meme probleme

  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
    met le niveau a MYSQLI_REPORT_ERROR

    sinon essaye avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id_gp1, spg_name_ar FROM users_sgroups WHERE 1

  13. #13
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    ca marche:

    + pourquoi dois je avoir un index? en mysql je le fesais pas,
    + pourquoi mettre l'index en premier lieu dans ma requete, si jamais je n'avais pas besoin, je vais pas le selectionner, donc ca va me donner l'erreur de l'index.

    conclusion, c'est quoi les etapes de:

    + se connecter a un serveur,
    + mettre l'encodage,
    + selectionner une base de donnee,
    + afficher les resultats,
    + fermer la connexion.

    merci

  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
    ca marche:

    + pourquoi dois je avoir un index? en mysql je le fesais pas,
    + pourquoi mettre l'index en premier lieu dans ma requete, si jamais je n'avais pas besoin, je vais pas le selectionner, donc ca va me donner l'erreur de l'index.

    conclusion, c'est quoi les etapes de:

    + se connecter a un serveur,
    + mettre l'encodage,
    + selectionner une base de donnee,
    + afficher les resultats,
    + fermer la connexion.

    merci
    - l'index c'est juste un warning en effet, y'a pas de WHERE dans ta requêtes et lui est bête et méchant

    pour les étape c'est ok, avec mysqli tu peux direct choisir la base de donnée via le constructeur

  15. #15
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    voila le code final:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = 'SELECT id_gp1, id_sgp, sgp_name_ar FROM users_sgroups';
    comment puis je eviter ce genre de warning si j'ai pas besoin de selectionner un index?

  16. #16
    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
    voila le code final:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = 'SELECT id_gp1, id_sgp, sgp_name_ar FROM users_sgroups';
    comment puis je eviter ce genre de warning si j'ai pas besoin de selectionner un index?
    t'as testé avec le WHERE 1 ?
    mais laisse le rapport sur MYSQLI_REPORT_ERROR et ne t'occupe pas des indexes

  17. #17
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    j'ai teste avec WHERE 1: ca veut dire quoi?

    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
     
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
     
    <?php
    include 'connect.php';
     
    /* Active le rapport d'erreur mysqli */
    //mysqli_report(MYSQLI_REPORT_ALL);
    //error_reporting(E_ALL);
     
    error_reporting(E_ALL | E_STRICT);
    mysqli_report(MYSQLI_REPORT_ERROR); //MYSQLI_REPORT_ALL & ~MYSQLI_REPORT_STRICT
     
    $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_sgp, id_gp1, sgp_name_ar FROM users_sgroups';
    $query = 'SELECT id_gp1, id_sgp, sgp_name_ar FROM users_sgroups WHERE 1';
    /* Requête "Select" retourne un jeu de résultats */
     
    $result = $mysqli->query($query);
        //printf("Select a retourné %d lignes.\n", $result->num_rows);
     
    /* 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, $id_sgp, $sgp_name_ar);
     
        /* fetch values */
        while ($stmt->fetch()) {
            echo $id_sgp.': '.$sgp_name_ar.'<br>';
        }
     
        /* close statement */
        $stmt->close();
    }
    else
    {
    	echo 'ohoooooooo';
    }
     
     
    $mysqli->close();
    ?>

  18. #18
    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
    c'est juste une condition qui est toujours vrai

  19. #19
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    donc je devais toujours mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqli_report(MYSQLI_REPORT_ERROR);
    en haut de ma page afin d’éviter ce genre de warnings?

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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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