Bonnes pratiques pour exécuter une requête

Eléphanteau du PHP | 43 Messages

09 déc. 2007, 15:15

Bonjour à tous,

Voici ma question, quel est la meilleur et aussi la difference entre ces deux requete sql qui font la même chose
$sql = "SELECT * FROM config";
$sqlq = mysql_query($sql) or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
$result_sql = mysql_fetch_assoc($sqlq);
et
$sqlq = mysql_query("SELECT * FROM config") or die('Erreur SQL !<br><br>'.mysql_error());
$result_sql = mysql_fetch_assoc($sqlq);
Merci

ViPHP
ViPHP | 5920 Messages

09 déc. 2007, 15:32

Euh, les deux requètes sont absolument identiques… :-/

Eléphanteau du PHP | 43 Messages

09 déc. 2007, 15:37

Bonjour à tous,

Voici ma question, quel est la meilleur et aussi la difference entre ces deux requete sql qui font la même chose

..........

Merci
je le sais sa, mais quel est la meilleur et aussi la différence entre les deux requêtes

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

09 déc. 2007, 15:58

Bien sûr il n'y a pas de différence entre les requêtes, elles sont identiques; ce dont tu parles est la manière de les traiter. (le terme précis serait "requêtage")

La meilleure façon de faire devrait ressembler à
$sql = 'SELECT * FROM config';
$result = mysql_query($sql);

if (!$result)
{
	trigger_error('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
	exit;
}

while ($row = mysql_fetch_assoc($result))
{
}
Premièrement, je déconseille fortement l'utilisation de "or die()" pour plusieurs raisons : ça crée des lignes trop longues où il est facile de se tromper (la preuve étant que tu t'es trompé de nom de variable). De plus, "die" ne donne aucune indication sur le script ou la ligne qui l'a invoqué. Je recommande d'utiliser un vrai "if" qui permet d'exécuter plusieurs commandes et est plus lisible, combiné à trigger_error() pour afficher le script et le numéro de ligne. Sous PHP5 tu peux choisir de générer une exception à la place.

mysql_query() renvoit une ressource représentant le résultat, c'est pour cela que son contenu est stocké dans une variable dont le nom est $result. mysql_fetch_assoc() renvoit une ligne de résultat, d'où $row.

Je déconseille d'utiliser un nom différent à chaque invocation de $sql ou $result, ça n'a aucun intérêt, cela retarde la destruction du résultat (donc on utilise plus de mémoire) et ça favorise les erreurs de variables.

Eléphanteau du PHP | 43 Messages

09 déc. 2007, 16:31

Ok, et merci pour ces precieuse informations et conseil.
Je déconseille d'utiliser un nom différent à chaque invocation de $sql ou $result, ça n'a aucun intérêt, cela retarde la destruction du résultat (donc on utilise plus de mémoire) et ça favorise les erreurs de variables.
c''est-à-dire ? je n'ai pas très bien compris cet phrase

Autre petit question.

Vaut mieux faire
<?php
mysql_connect("localhost", "*****", "***");
mysql_select_db("***");
?>

du html

<?php
du php
une requete
du php
une requete
?>

du html

<?php
mysql_close();
?>
ou

du html

<?php
du php

mysql_connect("localhost", "*****", "***");
mysql_select_db("***");
une requete
mysql_close();

du php

mysql_connect("localhost", "*****", "***");
mysql_select_db("***");
une requete
mysql_close();

?>

du html

Administrateur PHPfrance
Administrateur PHPfrance | 11443 Messages

09 déc. 2007, 16:41

Autre petit question.
Modération :
solodown, si tu as une autre question ouvre un nouveau sujet,
cela te permettra d'avoir plus de réponses.

En plus, tu pourras mettre [Résolu] dès que ton problème évoqué ici sera réglé.

Merci de prendre le temps de lire les règlements.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

09 déc. 2007, 16:47

je n'ai pas très bien compris cet phrase
Par exemple, éviter
$sql_cat = 'SELECT * FROM categories';
$result_cat = mysql_query($sql_cat);
// ...
$sql_news = 'SELECT * FROM news';
$result_news = mysql_query($sql_news);
Sauf cas exceptionnel, toutes tes requêtes devraient s'appeler $sql, tous tes résultats $result, etc... Il est très rare de devoir traiter plusieurs requêtes en même temps donc les conflits sont inexistants et cette pratique minimise les risques de typos. D'ailleurs, si ton éditeur le permet crée-toi une macro pour l'exemple que je citais plus haut, avec une chaîne vide pour $sql.

Concernant ton autre question, il vaut mieux ne pas fermer puis réouvrir inutilement ta connexion. C'est une opération relativement coûteuse donc à part si tu as un traitement de plusieurs secondes/minutes ne nécessitant pas MySQL et que le nombre de connexions est limité au niveau du serveur, inutile de le faire.
si tu as une autre question ouvre un nouveau sujet
Objection ! C'est plutôt dans le sujet des bonnes pratiques donc inutile de s'étaler hein :) J'ai renommé le sujet en conséquence.

Eléphanteau du PHP | 43 Messages

09 déc. 2007, 17:09

j'ai plus qu'a modifier mes pages :mrgreen:

quand il y en a plusieurs dans une page, je renommai toutes les suivantes :lol: :lol:

Pour l'ouverture et la fermeture de la base, merci de renseignement :wink: mais si sur des pages j'ai oublié de fermé la bdd a la fin, quel conséquence cela a, ressource, vitesse etc...

Mammouth du PHP | 2937 Messages

09 déc. 2007, 17:18

Quant à la requête en soi,

Code : Tout sélectionner

SELECT * FROM config
si tu n'as pas besoin de toutes les colonnes de ta table, évite d'employer le joker * et indique à sa place la(les) colonne(s) qu'il te faut. Bref, sois server-friendly. :wink:
Modifié en dernier par Victor BRITO le 09 déc. 2007, 21:59, modifié 2 fois.

ViPHP
ViPHP | 5920 Messages

09 déc. 2007, 17:59

Autre petit question.

Vaut mieux faire
<?php
mysql_connect("localhost", "*****", "***");
mysql_select_db("***");
?>

du html

<?php
du php
une requete
du php
une requete
?>

du html

<?php
mysql_close();
?>
ou

du html

<?php
du php

mysql_connect("localhost", "*****", "***");
mysql_select_db("***");
une requete
mysql_close();

du php

mysql_connect("localhost", "*****", "***");
mysql_select_db("***");
une requete
mysql_close();

?>

du html
Vaut mieux faire ceci :
<?php

mysql_connect(...);
mysql_select_db(...);

tout ton code php

mysql_close();

?>

ton html
Cela ne sert à rien de faire une connexion par requète mis à part à faire exploser le serveur SQL… Et on préfère mettre le html en dehors du php et en toute fin de script, histoire d'avoir un code plus clair et de s'affranchir d'éventuelles erreurs de headers.

Voire mieux :
-index.php
<?php

// On définit les pages du site, lequelles sont accessibles par index.php?p=0 , index.php?p=1 , ...
$pages=array('page_defaut.php', 'page1.php', 'page2.php', ...);

// On fait toutes les initialisations, en l'occurence on peut mutualiser la connexion sql
mysql_connect(...);
mysql_select_db(...);

// On inclue la page demandée
include( isset($_GET['p']) && isset($pages[$_GET['p']]) ? $pages[$_GET['p']] : $pages[0] );

// On détruit les ressources
mysql_close(...);

?>
Ton code html
-page1.php :
<?php
Ton code php
?>
Et on peut même aller plus loin encore avec des classes pour gérer les connexions sql ou encore les templates (les deux plus importantes dans une application web classique)…

Eléphanteau du PHP | 43 Messages

09 déc. 2007, 18:22

ok, Merci des renseignements

Je sais que ces questions peuvent paraitre con, mais pour moi sa une importance, j'aime bien faire les choses comme il faut et prendre de bonne habitude

Si j'ai d'autres questions con :lol: dans le même style, je l'ai mettre ici

Puis par la suite modifier le 1er message pour regroupé les questions et réponses, sa peut être utile je pense, non :?:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 déc. 2007, 18:26

Puis par la suite modifier le 1er message pour regroupé les questions et réponses, sa peut être utile je pense, non :?:
Conserver trop de questions/réponses dans un seul sujet mène vite à un brouhaha incompréhensible.
Par contre, ce sujet pourrait être l'ébauche d'un sujet "Bonne pratique" dans la FAQ ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 43 Messages

09 déc. 2007, 19:16

Comme vous voulez

Où ce trouve ce FAQ :?:

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

09 déc. 2007, 19:24

@Sékiltoyai: ouh lala, déjà que l'ami solodown nous met du code à rallonge, si en plus tu le cites on ne va jamais s'en sortir ! :lol:
Je sais que ces questions peuvent paraitre con, mais pour moi sa une importance, j'aime bien faire les choses comme il faut et prendre de bonne habitude
Pas de problème, c'est la bonne chose à faire. Tous ceux qui ont posté dans ce sujet se sont posé ces mêmes questions, c'est une excellente pratique.
Si j'ai d'autres questions con :lol: dans le même style, je l'ai mettre ici
Euh, en fait non, on essaie de garder des sujets courts pour éviter la confusion dont parle zeus. Si tu as d'autres questions n'hésite pas à ouvrir un nouveau sujet, mais si tu attends encore un peu on devrait avoir créé une FAQ à ce sujet dans le forum du même nom ;)

ViPHP
ViPHP | 5920 Messages

09 déc. 2007, 19:38

@Sékiltoyai: ouh lala, déjà que l'ami solodown nous met du code à rallonge, si en plus tu le cites on ne va jamais s'en sortir ! :lol:
Non, mais c'est simplement pour faire croire que mes réponses sont étoffées :lol: