2010-12-11 186 views
0

我的表「info」有四列用戶名,緯度,經度和文件名。我發送一個請求從android(客戶端)獲取給定的一組用戶名,經度和緯度組合的特定文件名,這裏是處理請求的代碼的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子句用於獲取文件名...爲​​什麼?是查詢錯誤還是有其他方法來做到這一點....我使用MYSQL

另一個觀察:如果我硬編碼的用戶名,緯度和經度值,然後它返回正確的文件名...

+1

請注意,您的代碼看起來與SQL注入安全的,但不是因爲你沒有附上$瓦爾在單引號'''的查詢字符串內。 – Johan 2011-05-28 22:06:51

+0

@Johan:好,我應該注意到那時我發佈了我的答案。 – thirtydot 2011-06-02 00:49:29

回答

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 2010-12-11 03:46:12

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

謝謝你thirtydot .... – Nohsib 2010-12-11 03:56:41