mysql_db_query VS mysql_query

OldJacques
Invité n'ayant pas de compte PHPfrance

26 févr. 2012, 17:07

Bonjour à vous tous,
Depuis quelque temps je rencontre un problème avec :
"Deprecated: Function mysql_db_query() is deprecated in"
J'ai bien compris qu'il fallait la changé par "mysql_query"

Mais voila je ne comprend pas.
J'ai recherché des exemples concrets sur la toile... :(
Même sur php.net je ne comprend pas l'exemple #2.
Je nage completement !?
(Que vient faire : mysql_real_escape_string($firstname) Je suis allez voir et je ne comprend même pas "Protège une commande SQL de la présence de caractères spéciaux")

voila avant je faisais cela :

Dans un fichier : connect.php, tous mes variables de connexions : $db_host; $db_base; $db_user; $db_pass;
Et : $db = mysql_connect("$db_host", "$db_user", "$db_pass") or Die("Base Down !");

Puis dans mes pages :
$sql="SELECT * FROM $TAB WHERE 1";       
$resultat = mysql_db_query($db_base, $sql, $db) or die ('ERREUR \"$resultat\" : '.$sql.' '.mysql_error());
$enr = mysql_fetch_array($resultat)OR DIE ('ENR PAS COOL'.$sql.' '.mysql_error());
Puis à l'aide d'un :
echo $enr['nom'];
J'affichais "nom"

Ou alors :
$query = "UPDATE $TAB  SET col1='$col1', col2='$col2', ... WHERE id_tab='$id_tab";			
$result = mysql_db_query($db_base, $query, $db) OR DIE ($result.'  '.mysql_error());
Auriez vous des exemples concrets ? Ou même des liens sur des sites ou c'est clair et simple ?

Je dois me faire vieux :)

Merci à vous tous
Jacques

ViPHP
xTG
ViPHP | 7331 Messages

26 févr. 2012, 17:30

Pour la connexion tu trouveras des exemples ici : http://fr2.php.net/manual/fr/function.m ... ect-db.php (mysql_connect et mysql_select_db)
Ensuite pour un exemple de mysql_query, il y en a plein la doc : http://fr2.php.net/manual/fr/function.mysql-query.php
Concernant mysql_real_escape_string() c'est une fonction de protection à utiliser sur toute variable que tu injectes dans une requête. Cela échappe les caractères et évite les injections non volontaires.

OldJacques
Invité n'ayant pas de compte PHPfrance

26 févr. 2012, 17:48

xTG,
Merci de ta réponse.

J'ai regardé la doc php http://fr2.php.net/manual/fr/function.mysql-query.php
Je ne comprend pas l'exemple #2 ...

Pas grave vais utiliser l'éternel "@" ! :)
Tant pis
Merci bonne journée
Jacques

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 févr. 2012, 19:04

Nooooonnn pas le "@" !! :)

Alors si je te dis que mysql_real_escape_string() te permet de protéger tes variables, je suppose que tu vas pas être plus avancé, alors on va essayer avec un exemple :)

Supposons la requête suivante :
"DELETE FROM ma_table WHERE colonne = '" . $var . "'";
Cette requête supprimer tous les enregistrement pour lesquels la valeur de colonne est égale à $var. Jusque là, tout va bien si $var est égal à un id ou une chaine de caractère... mais si l'utilisateur te soumet une variable $var qui a la valeur suivante : " ' OR 'toto'='toto ", ta requête devient :
"DELETE FROM ma_table WHERE colonne = '' OR 'toto'='toto'";
Cette requête supprimer tous les enregistrement pour lesquels la valeur de colonne est égale à vide ('') OU pour lesquels toto sera égal à toto (ce qui est toujours le cas). Et hop, d'une simple variable non protégée, te voilà avec une table vide :)

Et ça, c'est juste avec une apostrophe ;)

Dans l'exemple, c'est vrai qu'il est ridicule de protéger la chaîne 'fred', mais ils indiquent que ces valeurs peuvent être demandées à un utilisateur... et il devient alors important de les protéger pour éviter que ta requête ne retourne des informations que tu n'aurais pas souhaité communiqué (ex : une union avec la tables des utilisateurs qui contient login et mot de passe... voire même ceux du user avec lequel tu te connectes - et donc obtenir ainsi un contrôle total sur ta base)

Une fois la requête sql constituée (et sécurisée), mysql_query() va l'exécuter et récupérer les résultats qu'il suffit ensuite de parcourir classiquement avec l'un des mysql_fetch_* :)

Est-ce que c'est plus clair ? et est-ce que tu vas oublier l'usage du @ ? ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

27 févr. 2012, 11:15

(Que vient faire : mysql_real_escape_string($firstname) Je suis allez voir et je ne comprend même pas "Protège une commande SQL de la présence de caractères spéciaux")
Image
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 févr. 2012, 11:28

:mrgreen: :mrgreen: :mrgreen:
Il en faut peu pour être heureux ......