2010-12-11 19 views
0

私のテーブル "info"には、ユーザ名、緯度、経度、ファイル名の4つのカラムがあります。私はアンドロイド(クライアント)から要求を処理しているコードのphp(サーバ側)がここにあるユーザ名、緯度、経度の組み合わせの特定のファイル名をフェッチするリクエストを送信しています...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"]; 

ここに問題があります: 上記のクエリを使用すると、返されるファイル名はユーザー名のみに基づいており、緯度と経度は考慮されません。要するに、where句の後の最初の "name = value"の組だけがファイル名を取得するために使用されます...それはなぜですか?クエリが間違っているか、これを行う別の方法があります....私はMYSQLを使用しています

もう1つの観察:ユーザー名、緯度、経度の値をハードコードすると、正しいファイル名が返されます...

+1

あなたのコードは、SQLインジェクションから安全に見えますが、あなたは、クエリ文字列内の単一引用符 ' ''であなたの$ VARSを囲むために失敗したためではないことに注意してください。 – Johan

+0

@Johan:良いキャッチ、私は私の答えを投稿したときにその時気づいていたはずです。 – thirtydot

答えて

1

最初の文字列にはすべての%s要素が含まれていなければなりませんが、それ以降の引数は%sを置き換えていると思います。

$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

あなたは正しい方法です、それはそのバグでした...そのうまくいって...ありがとうございました。 – 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

thankyou thirtydot .... – Nohsib