2010-12-11 5 views
0

Ma table "info" a quatre colonnes nom d'utilisateur, latitude, longitude et nom de fichier. J'envoie une requête d'android (client) pour chercher un nom de fichier particulier pour un ensemble donné de combinaisons nom d'utilisateur, latitude et longitude, voici le php (côté serveur) du code qui gère la requête ...question de requête mysql

mysql_connect("localhost", "bb", "707") or die(mysql_error()); 
mysql_select_db("test1") or die(mysql_error()); 

$usrnm = $_REQUEST["username"]; 
$lat = $_REQUEST["lat"]; 
$lng = $_REQUEST["lng"]; 

$query = sprintf("SELECT filename FROM info WHERE username = '%s'" 
    ,mysql_real_escape_string($usrnm) 
    ,"AND latitude = %s",mysql_real_escape_string($lat) 
    ,"and longitude = %s",mysql_real_escape_string($lng)); 

$result = mysql_query($query) 
or die(mysql_error()); 

$row = mysql_fetch_array($result); 

echo $row["filename"]; 

Voici le problème: Si j'utilise la requête ci-dessus, le nom de fichier renvoyé est basé uniquement sur le nom d'utilisateur et la latitude et les longitudes ne sont pas prises en compte. en bref seulement la première paire "nom = valeur" après la clause where est utilisée pour obtenir le nom de fichier ... pourquoi est-ce ??? Est-ce que la requête est incorrecte ou est-il une autre façon de le faire .... J'utilise MYSQL

Encore une observation: Si je hardcode les valeurs pour le nom d'utilisateur, la latitude et la longitude, alors il retourne le bon nom de fichier ...

+1

Notez que votre code semble sûr de SQL-injection, mais pas parce que vous ne parvenez pas à joindre votre $ vars entre guillemets simples '' 'dans la chaîne de requête. – Johan

+0

@Johan: Bonne prise, j'aurais dû le remarquer à l'époque quand j'ai posté ma réponse. – thirtydot

Répondre

1

La première chaîne doit contenir tous les éléments% s, je crois, les arguments après qui remplacent les% s dans l'ordre d'occurence.

$query = sprintf("SELECT filename FROM 
    info where username = '%s' and 
    latitude = %s and longitude = %s",mysql_real_escape_string($usrnm)  
    ,mysql_real_escape_string($lat) 
    ,mysql_real_escape_string($lng)); 
+0

Vous avez raison methodin, c'était le bug ... son fonctionnement bien ... merci ... – Nohsib

1
<?php 

mysql_connect("localhost", "bb", "707") or die(mysql_error()); 
mysql_select_db("test1") or die(mysql_error()); 

$usrnm = $_REQUEST["username"]; 
$lat = $_REQUEST["lat"]; 
$lng = $_REQUEST["lng"]; 

$query = sprintf(
    "SELECT filename FROM info WHERE username = '%s' 
    AND latitude = '%s' AND longitude = '%s'", 
    mysql_real_escape_string($usrnm), 
    mysql_real_escape_string($lat), 
    mysql_real_escape_string($lng) 
); 

$result = mysql_query($query) or die(mysql_error()); 

$row = mysql_fetch_array($result); 

echo $row["filename"]; 
?> 
+0

merci thirtydot .... – Nohsib