Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/05/2011, 11h06   #1
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
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 :
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
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 11h23   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 11h31   #3
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
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

Citation:
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 :
1
2
3
 
	/* execute query */
    $stmt->execute();
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 11h38   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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 :
1
2
$query = 'SELECT id_gp1, spg_name_ar FROM users_sgroups';
$query->num_rows;
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 20h39   #5
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Code :
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 :
1
2
 
Notice: Trying to get property of non-object in index4.php on line 25
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 09h45   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
$query est du type string je vois pas ce que t'attends en faisant : $query->num_rows
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 11h21   #7
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
un autre code:

Code :
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 :
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
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 11h31   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
c'est :
Code :
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 12h44   #9
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Code :
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 :
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);
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 13h27   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
t'as pas d'index dans ta table ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 17h05   #11
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Citation:
Envoyé par stealth35 Voir le message
t'as pas d'index dans ta table ?
Code :
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 :
1
2
 
$query = 'SELECT id_sgp, id_gp1, sgp_name_ar FROM users_sgroups';
le meme probleme
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 17h10   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
met le niveau a MYSQLI_REPORT_ERROR

sinon essaye avec

Code :
SELECT id_gp1, spg_name_ar FROM users_sgroups WHERE 1
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 17h43   #13
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
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
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 17h49   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 17h54   #15
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
voila le code final:

Code :
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?
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 17h59   #16
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par isitien Voir le message
voila le code final:

Code :
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 18h47   #17
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
j'ai teste avec WHERE 1: ca veut dire quoi?

Code :
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();
?>
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 18h49   #18
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
c'est juste une condition qui est toujours vrai
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 19h11   #19
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
donc je devais toujours mettre
Code :
mysqli_report(MYSQLI_REPORT_ERROR);
en haut de ma page afin d’éviter ce genre de warnings?
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 20h58   #20
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
un essai avec une class:

Code :
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
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h00.


 
 
 
 
Partenaires

Hébergement Web