我的表格“信息”有四列用户名,纬度,经度和文件名。我发送一个来自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
还有一个观察:如果我对用户名,纬度和经度的值进行硬编码,那么它将返回正确的文件名......
答案 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"];
?>