MySql : like puis différence de résultat

MySql : like puis différence de résultat - SQL/NoSQL - Programmation

Marsh Posté le 24-02-2003 à 16:44:04    

salut
 
le titre n'est pas très explicite désolé mais il m'arrive un truc zarbe :
 

Code :
  1. requete :
  2. $name=toto ;
  3. $req = "select * from mabase where nom like '%".$name."%'" ;
  4. $requete=mysql_db_query($sql_bdd,$req,$db_link);
  5. $data = mysql_fetch_array($requete) ;


 
j'ai dans ma base un 'toto' , un 'pretoto' et un 'totosuffix'
 

Code :
  1. Résultat :
  2. for ($i=0;$i<mysql_num_rows($requete);$i++)
  3. {
  4. echo($data['nom']."<br>" ) ;
  5. echo(mysql_result($requete,$i,'nom')."<br>" );
  6. }


 
Dans le 1er cas (1er echo), j'ai 3 'toto' :
toto
toto
toto
 
Dans le second :
toto
pretoto
totosuffix
 
Pkoi dans le 1er cas, il ne prend que la chaine exact ?
c une spécif de cette syntaxe ?
 
Merci
a+


Message édité par kileak2 le 24-02-2003 à 16:45:25
Reply

Marsh Posté le 24-02-2003 à 16:44:04   

Reply

Marsh Posté le 24-02-2003 à 16:52:08    

relis la doc concernant mysql_fetch_array()...
 
chaque appel retourne la ligne courante sous forme de tableau et avance le pointeur de résultat MySQL d'une ligne, ou returne FALSE si y'a plus de résultats
 
si tu fais un seul appel à mysql_fetch_array() ton pointeur n'avance pas et il t'affiche toujours la même ligne...
 
de plus utiliser mysql_result() est très fortement déconseillé...

Reply

Marsh Posté le 24-02-2003 à 20:54:45    

Sh@rdar a écrit :

relis la doc concernant mysql_fetch_array()...
 
chaque appel retourne la ligne courante sous forme de tableau et avance le pointeur de résultat MySQL d'une ligne, ou returne FALSE si y'a plus de résultats
 
si tu fais un seul appel à mysql_fetch_array() ton pointeur n'avance pas et il t'affiche toujours la même ligne...
 
de plus utiliser mysql_result() est très fortement déconseillé...


 
merci
 
je suis allé sur Nexen mais j'ai pas eu trop le temps de me plonger dedans.
Juste comme ca, tu conseilles koi de "rapide" pour faire un truc genre un moteur de recherche dans ton site qui fatalement mouline pas mal ?
 
EDIT : en zieutant sur des sites tutoriaux (asp-php.net pour ne pas le citer) j'ai compris :
 

Code :
  1. while ($data = mysql_fetch_array($requete))
  2. {
  3. echo("login ".$data['nom']."<br>" ) ;
  4. }


 
C'est bon ca en perf ?
 
De même, un type de connexion proposé par asp-php.net est :
 

Code :
  1. <?
  2. // Paramètres persos
  3. $host = "localhost"; // voir hébergeur
  4. $user = "login"; // vide ou "root" en local
  5. $pass = "password"; // vide en local
  6. $bdd = "ma_base"; // nom de la BD
  7. // connexion
  8. @mysql_connect($host,$user,$pass)
  9.    or die("Impossible de se connecter" );
  10. @mysql_select_db("$bdd" )
  11.    or die("Impossible de se connecter" );
  12. ?>


le @ sert à koi ? c parce qu'il n'y a pas d'affectation genre :
 
$connection = mysql_connect($host,$user,$pass)
 
 
Enfin, kel est l'intéret de mettre un mot de passe puisque il sera en clair ds le fichier de connexion.php ?
 
 
a+
 
merci


Message édité par kileak2 le 24-02-2003 à 23:04:25
Reply

Marsh Posté le 24-02-2003 à 23:08:40    

Je pense pas qu'il y ait de différence de perfs :)
 
Le @ devant un appel de fonction sert à désactiver l'affichage d'erreurs (les "warning : ...." que tu as parfois).


Message édité par mrbebert le 24-02-2003 à 23:09:51
Reply

Marsh Posté le 25-02-2003 à 09:47:22    

mrBebert a écrit :

Je pense pas qu'il y ait de différence de perfs :)
 
Le @ devant un appel de fonction sert à désactiver l'affichage d'erreurs (les "warning : ...." que tu as parfois).


 
merci
 
d'autres avis par rapport à mes questions ?
 
a+

Reply

Marsh Posté le 25-02-2003 à 19:54:37    

moi m'sieur, moi, je peux donner mon avis ? :D  
 
C'est bien d'utiliser le mysql_fetch_array. C'est surement la solution la plus lisible, et certainement très performante :)  
Faut juste faire attention aux résultats.
Si tu as une requête qui te renvoie une seule colonne avec le résultat suivant :

aaa
NULL
bbb

il va y avoir un problème en le parcourant. En arrivant à la deuxième ligne, le mysql_fetch_array() sera évalué à faux et tu quitteras la boucle.
C'est rare comme situation mais toujours bon à savoir ;)  
 
Pour le mot de passe, c'est important. Un serveur SQL peut être accédé par plusieurs utilisateurs, ce serait dommage que n'importe qui puisse écrire un script accédant à tes données. Bien sur, le fichier qui contient le mot de passe ne doit pas être accessible à n'importe qui.

Reply

Marsh Posté le 26-02-2003 à 09:05:53    

mrBebert a écrit :

moi m'sieur, moi, je peux donner mon avis ? :D  
 
C'est bien d'utiliser le mysql_fetch_array. C'est surement la solution la plus lisible, et certainement très performante :)  
Faut juste faire attention aux résultats.
Si tu as une requête qui te renvoie une seule colonne avec le résultat suivant :

aaa
NULL
bbb

il va y avoir un problème en le parcourant. En arrivant à la deuxième ligne, le mysql_fetch_array() sera évalué à faux et tu quitteras la boucle.
C'est rare comme situation mais toujours bon à savoir ;)  
 
Pour le mot de passe, c'est important. Un serveur SQL peut être accédé par plusieurs utilisateurs, ce serait dommage que n'importe qui puisse écrire un script accédant à tes données. Bien sur, le fichier qui contient le mot de passe ne doit pas être accessible à n'importe qui.


 
Merci.
 
Ben c pas si rare que ca ! Si tu as une colonne facultative qui peut etre à NULL et bien ca peut arriver.
A moins que tu ne fasses un "select *". Mais quel est l'intérêt de faire un "select *" si tu sais que tu ne veux qu'un champs ?
 
Ok pour la protection de ta base ! Je mets ca ds un répertoire "PROTEC" (par exemple) puis je fais un fichier .htaccess
c ca ?
 
grazie

Reply

Marsh Posté le 26-02-2003 à 10:36:01    

kileak2 a écrit :


 
Merci.
 
Ben c pas si rare que ca ! Si tu as une colonne facultative qui peut etre à NULL et bien ca peut arriver.
A moins que tu ne fasses un "select *". Mais quel est l'intérêt de faire un "select *" si tu sais que tu ne veux qu'un champs ?
 
Edit : je viens de faire plusieurs tests et je ne sors jamais de la boucle. Qq soit la position de mon champs NULL et même si je fais juste un select sur la zone qui contient des valeurs NULL.
 
Ok pour la protection de ta base ! Je mets ca ds un répertoire "PROTEC" (par exemple) puis je fais un fichier .htaccess
c ca ?
 
grazie

Reply

Marsh Posté le 26-02-2003 à 19:15:03    

Le fichier .htaccess, c'est seulement pour la protection au niveau du serveur http.
Il y a 2 possibilités d'accès :
- par quelqu'un connecté sur le serveur : là, ce sont les droits d'accès aux fichiers qui jouent.
- par le serveur web : il suffit de nommer le fichier en .php (ou n'importe quelle extension traitée par le serveur web). Ainsi, le serveur exécutera le fichier au lieu de renvoyer directement son contenu.

Reply

Marsh Posté le 26-02-2003 à 19:53:06    

mrBebert a écrit :

Le fichier .htaccess, c'est seulement pour la protection au niveau du serveur http.
Il y a 2 possibilités d'accès :
- par quelqu'un connecté sur le serveur : là, ce sont les droits d'accès aux fichiers qui jouent.
- par le serveur web : il suffit de nommer le fichier en .php (ou n'importe quelle extension traitée par le serveur web). Ainsi, le serveur exécutera le fichier au lieu de renvoyer directement son contenu.


 
ok :) Y avait un quiproquo :)
 
a+ merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed