mysql查询问题

时间:2010-12-11 03:36:06

标签: php mysql

我的表格“信息”有四列用户名,纬度,经度和文件名。我发送一个来自android(客户端)的请求来获取给定的用户名,纬度和经度组合的特定文件名,这里是处理请求的代码的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'"
   ,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

还有一个观察:如果我对用户名,纬度和经度的值进行硬编码,那么它将返回正确的文件名......

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分: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"];   
?>