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 09/12/2010, 15h42   #1
Membre expérimenté
 
Avatar de ArKam
 
Inscription : mars 2007
Messages : 505
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : mars 2007
Messages : 505
Points : 511
Points : 511
Par défaut Plusieurs requetes en PHP/MySQL

Bien le bonjour,

Je cherche à faire des statistics sur des valeurs enregistrées sur une DB.

Malheureusement, je ne connais pas de moyen de faire plusieurs requêtes en une seul, et c'est pourquoi j'ai tenté la chose suivante:

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
 
<?php
 
//Déclaration des variables:
 
$dbHost="localhost";
$username="root";
$password="toor";
$database="TST_DB";
 
// Requetes SQL:
 
// total de connexions:
$numRequests="SELECT count(*) FROM access_log WHERE action LIKE 'TCP%'";
 
// Nombres de connexions en cache:
$numRequestsCache="SELECT count(*) FROM access_log WHERE action LIKE 'TCP%'";
 
// Pourcentage de connexions en cache:
$percentRequestsCache="SELECT count(*) FROM access_log WHERE action LIKE 'TCP%'";
 
// Connexion à la base de donnée
 
$mysqlConnect=@mysql_connect($host,$username,$password);
mysql_select_db($database,$mysqlConnect);
 
// Execution et traitement des requetes:
$numRequestsQuery=@mysql_query($numRequests);
	while ($row = mysql_fetch_array($numRequestsQuery, MYSQL_NUM)) {
  			return $totalRequests=$row['0'];
			break;
	}
 
// Deconnexion de la base de donnée:
mysql_close($mysqlConnect);
 
// Connexion à la base de donnée
 
$mysqlConnect=@mysql_connect($host,$username,$password);
mysql_select_db($database,$mysqlConnect);
 
// Execution et traitement des requetes:
$numRequestsCacheQuery=@mysql_query($numRequestsCache);
	while ($row = mysql_fetch_array($numRequestsCacheQuery, MYSQL_NUM)) {
  			return $totalRequestsCache=$row['0'];
			break;
	}
// Deconnexion de la base de donnée:
mysql_close($mysqlConnect);
 
// Connexion à la base de donnée
 
$mysqlConnect=@mysql_connect($host,$username,$password);
mysql_select_db($database,$mysqlConnect);
 
 
// Execution et traitement des requetes:
$percentRequestsCacheQuery=@mysql_query($percentRequestsCache);
	while ($row = mysql_fetch_array($percentRequestsCacheQuery, MYSQL_NUM)) {
  			return $totalRequestsPercent=$row['0'];
			break;
	}
?>
Le problème est que ça ne fonctionne pas, en fait, seul la première requête est correctement exécuté, les autres non.

Je me demande comment je pourrais faire ce que je cherche à faire
ArKam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 15h54   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
C'est 3 fois la meme requete non ?

Il est inutile de fermer la connexion après chaque requête.

A quoi servent tes return et tes break ?

C'est une mauvaise idée de cacher les erreurs, surtout quand on debug.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 15h55   #3
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Il me semble que l'on ouvre une connexion mysql, mais on ne la ferme pas.

en gros:

Code :
1
2
3
4
5
6
7
8
9
 
$mysqlConnect=@mysql_connect($host,$username,$password);
mysql_select_db($database,$mysqlConnect);
 
//requete1
//requete2
etc...
 
//---sans fermer la connexion. Ca se fait automatiquement
edit:grillé sur les connexions mysql.
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 15h57   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Citation:
Le problème est que ça ne fonctionne pas
1. Retire les @ qui te cachent les erreurs et gênent le débugage ;
2. Tes 3 requêtes sont identiques, normal ?
3. Tu as $row = mysql_fetch_array($numRequestsQuery, MYSQL_NUM) puis $totalRequests=$row['0'], or $row est un tableau dont les index sont des entiers, pas des chaînes ;
4. Pas besoin de fermer/ouvrir la cnx à MySQL pour chaque requête : ouvre-la avant ta 1re requête et ferme-la quand tu n'as plus besoin de MySQL.

Edit : grilled
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 16h01   #5
Membre expérimenté
 
Avatar de ArKam
 
Inscription : mars 2007
Messages : 505
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : mars 2007
Messages : 505
Points : 511
Points : 511
Pour le break c'est rien c'était un test.

J'ai trois fois la meme requete pour des raisons de tests.

Maintenant, si je fait ça:

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
 
<?php
 
//Déclaration des variables:
 
$dbHost="localhost";
$username="root";
$password="toor";
$database="TST_DB";
 
// Requetes SQL:
 
// total de connexions:
$numRequests="SELECT count(*) FROM access_log WHERE action LIKE 'TCP%'";
 
// Nombres de connexions en cache:
$numRequestsCache="SELECT count(*) FROM access_log WHERE action LIKE 'TCP%'";
 
// Pourcentage de connexions en cache:
$percentRequestsCache="SELECT count(*) FROM access_log WHERE action LIKE 'TCP%'";
 
// Connexion à la base de donnée
 
$mysqlConnect=@mysql_connect($host,$username,$password);
mysql_select_db($database,$mysqlConnect);
 
// Execution et traitement des requetes:
$numRequestsQuery=@mysql_query($numRequests);
$numRequestsCacheQuery=@mysql_query($numRequestsCache);
$percentRequestsCacheQuery=@mysql_query($percentRequestsCache);
 
//Traitement des données SQL:
	while ($row = mysql_fetch_array($numRequestsQuery, MYSQL_NUM)) {
  			return $totalRequests=$row['0'];
	}
 
	while ($row = mysql_fetch_array($numRequestsCacheQuery, MYSQL_NUM)) {
  			return $totalRequestsCache=$row['0'];
	}
 
	while ($row = mysql_fetch_array($percentRequestsCacheQuery, MYSQL_NUM)) {
  			return $totalRequestsPercent=$row['0'];
	}
?>
je n'ai toujours qu'une seul valeur.

Les returns sont la pour exporter la variable car c'est un second script qui vas se charger de la mise en page des données.

Après avoir lu sur le net plusieurs sujets, apparemment il n'est pas possible de faire plusieurs requêtes en MYSQL.

Vous auriez déjà entendu ça?
ArKam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 16h04   #6
Membre expérimenté
 
Avatar de ArKam
 
Inscription : mars 2007
Messages : 505
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : mars 2007
Messages : 505
Points : 511
Points : 511
Citation:
Envoyé par Séb. Voir le message
1. Retire les @ qui te cachent les erreurs et gênent le débugage ;
2. Tes 3 requêtes sont identiques, normal ?
3. Tu as $row = mysql_fetch_array($numRequestsQuery, MYSQL_NUM) puis $totalRequests=$row['0'], or $row est un tableau dont les index sont des entiers, pas des chaînes ;
d
Oui c'est normal pour les requetes comme éxpliqué plus haut

Pour ce qui est du tableau, ici je donne à ma variable la valeur de l'index0 et ça fonctionne tres bien, j'ai bien un string, je ne comprend donc pas ta phrase?
ArKam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 16h05   #7
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Citation:
Les returns sont la pour exporter la variable car c'est un second script qui vas se charger de la mise en page des données.
La suite ne sera donc pas exécutée.

Citation:
Après avoir lu sur le net plusieurs sujets, apparemment il n'est pas possible de faire plusieurs requêtes en MYSQL.
Ben non.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 16h07   #8
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Citation:
Envoyé par ArKam Voir le message
Oui c'est normal pour les requetes comme éxpliqué plus haut
J'ai relu je ne vois rien expliquant l'utilité ou la nécessité d'avoir 3 requêtes identiques à la suite.

Citation:
Pour ce qui est du tableau, ici je donne à ma variable la valeur de l'index0 et ça fonctionne tres bien, j'ai bien un string, je ne comprend donc pas ta phrase?
Ah oui ceci fonctionne :

Code :
1
2
3
4
<?php
 
$a[0] = 'salut' ;
echo $a['0'] ;
Sympa PHP Donc tu peux oublier ma remarque à ce sujet postée plus haut
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 16h11   #9
Membre expérimenté
 
Avatar de ArKam
 
Inscription : mars 2007
Messages : 505
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : mars 2007
Messages : 505
Points : 511
Points : 511
Bon alors je crois que je suis sur une piste

Si je vire les return et que je met un echo, j'ai bien ce que je veux.

De plus, j'ai pu virer la boucle while, qui pour le coup, ne servait donc pas à grand choses

T'as vue, c'est cool PHP hein !!

DONC,

Pourrais tu me dire pourquoi le return bloque le script?

Edit: OK j'ai compris pour les return, ils ne s'utilisent qu'avec une fonction, qui elle vas finir à un moment donné

PS: Pourquoi dans les exemples PHP ils utilisent une boucle while?
Si on utilise $valeur=$row['$i'] je comprend mais pour juste afficher une valeur dont on connait l'index ça ne sert à rien non?
ArKam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 17h16   #10
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Citation:
Pourrais tu me dire pourquoi le return bloque le script?
C'est son rôle. Il arrête le script ou la fonction et retourne une valeur.

Citation:
PS: Pourquoi dans les exemples PHP ils utilisent une boucle while?
Parce que très souvent on récupère plusieurs enregistrements. La boucle sert alors à parcourir le jeu d'enregistrements 1 à 1.

Citation:
Si on utilise $valeur=$row['$i'] je comprend mais pour juste afficher une valeur dont on connait l'index ça ne sert à rien non?
Oui, et mieux on peut nommer les champs retournés.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 17h49   #11
Membre expérimenté
 
Avatar de ArKam
 
Inscription : mars 2007
Messages : 505
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : mars 2007
Messages : 505
Points : 511
Points : 511
La boucle est donc belle et bien la pour ce que je pensais :-D

Merci pour les tuyaux, ça fonctionne bien mieux maintenant.

Je vais faire mon code à l’arrache pour l'instant, et je ferais de l'objet une fois le site fini, comme ça j'aurais bien compris les tenants et aboutissants de celui-ci.

Mici
ArKam 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 18h54.


 
 
 
 
Partenaires

Hébergement Web