Requetes sql multiples

Fermé
Mouslim02 Messages postés 318 Date d'inscription lundi 28 juillet 2014 Statut Membre Dernière intervention 4 juin 2015 - Modifié par crapoulou le 24/12/2014 à 09:39
Mouslim02 Messages postés 318 Date d'inscription lundi 28 juillet 2014 Statut Membre Dernière intervention 4 juin 2015 - 29 déc. 2014 à 09:25
bonjours
j'ai l'habite de pour executer plusieurs requetes de faire cela
require('bdd.php'); 
$reponse = $bdd->query('SELECT id FROM comment WHERE value=\'false\' ORDER BY ID');
$commentairesNonValides = 0;
while ($donnees = $reponse->fetch())
{
$commentairesNonValides = $commentairesNonValides + 1;
}
if ($commentairesNonValides > 0)
{
echo '<p align="center">Vous avez ' . $commentairesNonValides . ' commentaires non validés pour les produits !</p>';
}
$reponse->closeCursor();
require('bdd.php');
$reponse = $bdd->query('SELECT id FROM livre WHERE value=\'false\' ORDER BY ID');
$livreNonValide = 0;
while ($donnees = $reponse->fetch())
{
$livreNonValide = $livreNonValide + 1;
}
if ($commentairesNonValides > 0)
{
echo '<p align="center">Vous avez ' . $livreNonValide . ' commentaires non validés dans le livre d\'or!</p>';
}
$reponse->closeCursor();

j'ai le presentiment que cette façon de coder est ridicule -_- car on se conecte à la base de donnée, puis on la ferme on se reconecte ...
y a t'il un moyen pour mettre plusieurs requetes sql on se conectant une seul fois à la base de donnée ?
désolé la question peut sembler bete mais je ne maitrise pas a 100% PHP et MySQL
merci de votre aide :)
ps : j'utilise PDO je ne sais pas comment faire pour mysqli
voici comment je me conecte à la bdd
<?php
try
{
 $bdd = new PDO('mysql:host=localhost;dbname=aroma', 'root', '');
}
catch(Exception $e)
{
 die('Erreur : '.$e->getMessage());
}
?>

2 réponses

Utilisateur anonyme
27 déc. 2014 à 22:00
Bien sûr, puisque cette façon de coder est bête, incompréhensible, longue et ardue. Les programmeurs souhaitant tout le contraire ont mis au point plusieurs techniques.

Voilà la solution à ton problème.


require('bdd.php');

//Inutile de sélectionner les IDs, plutôt compter les
//colonnes correspondates aux critères de recherche...
	
//Il est aussi préférable, plutôt que d'entrer true ou false
//dans la bdd, de modifier ces valeurs explicites en language logique,
//où false = 0 alors que true = 1. Lors de la création de la strucure
//de la table, selectionne le type BOOLEAN, ce qui aura pour effet
//de créer un champs de type TINYINT(1) où tu entreras ces valeurs.
//[WHERE value = 0 est ainsi l'équivalent de WHERE value = \'false\']
$reponse = $bdd->query('

	SELECT 
	(SELECT COUNT(*) FROM comment WHERE value = 0) AS commentairesNonValides,
	(SELECT COUNT(*) FROM livre WHERE value = 0) AS livresNonValides');
	//Là-haut, essaie de garder une certaine logique. Tu as mis commentairesNonValides
	//pour la table comment, alors je place livre[s]NonValide[s] pour la table livre.

//Plus besoin d'une boucle puisque
//la requête ne retourne qu'une seule ligne.
$donnees = $reponse->fetch();

if($donnees['commentairesNonValides']>0){

	echo '<p align="center">Vous avez ' . $donnees['commentairesNonValides'] . ' commentaires non validés pour les produits !</p>';
	}

if($donnees['livresNonValides']>0){

	echo '<p align="center">Vous avez ' . $donnees['livresNonValides'] . ' commentaires non validés dans le livre d\'or!</p>';
	}

$reponse->closeCursor();


Mais voilà que certains trucs me sautent aux yeux à la lecture de ton code initial. Quelques astuces...


//Pourquoi? Lorsque tu «require», une seule fois suffit, 
//et la page est inclue dans le script!
require('bdd.php'); //Ligne 1 (UTILE)
require('bdd.php'); //Ligne 13 (INUTILE)

//Lorsque tu souhaites afficher des variables et du texte, 
//tu entoures la chaîne de double quotes, soit des guillemets.
//(sans oublier les «backward slash» qui viennent avant les guillements désirés DANS la chaîne!)
echo "<p align=\"center\">Vous avez $commentairesNonValides commentaires non validés pour les produits !</p>";

//Ici, là-haut, j'aurais pu utiliser cette méthode
echo "<p align=\"center\">Vous avez {$donnees['commentairesNonValides']} commentaires non validés pour les produits !</p>";
//...mais je préfère l'écrire comme je l'ai fait là-haut 
//lorsque je manipule des tableaux.

1
Mouslim02 Messages postés 318 Date d'inscription lundi 28 juillet 2014 Statut Membre Dernière intervention 4 juin 2015 11
28 déc. 2014 à 11:55
salut sunr
bon tout d'abord je tiens a te remercier pour ton aide, tu explique tres bien et tes scripts sont tres claires :)
tout d'abord j'ai utilisé require une seule fois et bizzarement j'ai recu une parse error -_- c'est pour cela que je le met deux fois
je n'ai pas utilisé d'antislash parce que j'ai utilisé des guillemets et des apostrophes
voici un exemple

"<p align=\"center\">Vous avez $comm" // la je suis d'accord pour l'antislash
"<p align='center'>Vous avez $comm" // la j'ai utlisé des ' et des "

STP pour ton script en haut,

SELECT
(SELECT COUNT(*) FROM comment WHERE value = 0) AS commentairesNonValides,
(SELECT COUNT(*) FROM livre WHERE value = 0) AS livresNonValides');

euh je ne maitrise pas ce genre de chose donc je sais pas, mais j'ai limpression que tu as oublié une parenthse au debut (juste pour confirmer et apprendre la bonne syntaxe)

aussi tu explique tres bien je voudrais encore te derenger unpeu
est ce possible en se conectant une seul fois sur une bdd d'ecrire plusieurs requetes qui lisent, inserent, et modifient des valeurs sur pluisuers tables mysql
et merci bcp :)
0
Utilisateur anonyme
29 déc. 2014 à 07:51
Le phénomène des require est très étrange, mais l'important est que ce nouveau script fonctionne avec un seul require.

Pour l'histoire des guillemets, bah c'est très bien. Je préfère utiliser des guillemets malgré les antislashs tout simplement parce que mon HTML est codé ainsi. C'est uniquement dans le but d'être conforme au reste, mais ça ne change absolument rien au final.

//La requête...
$reponse = $bdd->query('

	SELECT 
	(SELECT COUNT(*) FROM comment WHERE value = 0) AS commentairesNonValides,
	(SELECT COUNT(*) FROM livre WHERE value = 0) AS livresNonValides');

	//Imagine ceci comme une opération mathématique.
0
Mouslim02 Messages postés 318 Date d'inscription lundi 28 juillet 2014 Statut Membre Dernière intervention 4 juin 2015 11 > Utilisateur anonyme
29 déc. 2014 à 08:36
d'accord merci :)
0
J'ai envoyé par erreur, c'est parce que je l'écrit en faisant bien d'autres choses. La suite:

//La requête...
$reponse = $bdd->query('

 SELECT 
 (SELECT COUNT(*) FROM comment WHERE value = 0) AS commentairesNonValides,
 (SELECT COUNT(*) FROM livre WHERE value = 0) AS livresNonValides');

 //Pour t'aider, imagine une opération mathématique. 
 //Les priorités sont les parenthèses, puis on procède au reste.

 //Considérons qu'il y a 5 commentaires non validés, puis 3 livres non validés.
 //Une fois les parenthèses «accomplies», la requête ressemble à:

 'SELECT 
 (5) AS commentairesNonValides,
 (3) AS livresNonValides'


Enfin, pour le truc qui lit, insère puis modifie sur plusieurs tables, je suis navré, mais je n'en sais rien. Il est à noter toutefois que la programmation permet de quasi tout faire et que ses possibilités sont bien plus infinies qu'on ne pourrait le croire.

Je crois que l'important n'est pas forcément de toujours éviter les connections aux bdd, mais de coder proprement et se limiter au nécessaire. Il faut dire que cette requête là-haut ne dure qu'une infime fraction de seconde et ne représente ainsi aucun risque. Il me semble bien plus crucial de savoir élaborer une structure adéquate pour nos besoins. Le monde des bdd est large et complexe, et tous ceux qui le défie s'y confronte.
0
Mouslim02 Messages postés 318 Date d'inscription lundi 28 juillet 2014 Statut Membre Dernière intervention 4 juin 2015 11
29 déc. 2014 à 09:25
ah oui la c'est plus claire ;)
je suis d'accord avec vous, il ne faut se limiter qu'au necessaire.
en tout cas si je trouve une reponse a ma question je la métré ici ;)
merci eyt bon courage
0
FlyAwayExpert7 Messages postés 69 Date d'inscription vendredi 26 décembre 2014 Statut Membre Dernière intervention 14 novembre 2016 3
27 déc. 2014 à 15:34
Bonjour,
Oui, il y a moyen,
Recherche sur Google: PDO Prépare.
Une requête préparée est une requête qui est en constante interaction avec ta base de donnée.
J'espère t'avoir aider.

Cordialement

--
0
Mouslim02 Messages postés 318 Date d'inscription lundi 28 juillet 2014 Statut Membre Dernière intervention 4 juin 2015 11
27 déc. 2014 à 16:25
salut FlyAwayExpert7
tout dabord merci de votre aide :)
oui je fait des requetes préparés, mais ma question est : est ce possible de faire plusieurs requetes en se conectant une seule fois a la base de données
merci :)
0