sql查询语句有php变量时查询不到
$nowLongitude_max是一个数值,不比如109,直接换成109的话可以查询到,但是用php变量的话就查询不到了$nowLongitude_max 我用 floatval($nowLongitude_max);转换成float型了 展开
2014-02-23
你没有搞清楚sql语句的语法
如果你的字段是数字类型的,比如:int bigint 等字段类型,那值就不要加引号
你说的直接换成109可以查询到,估计应该是这样吧?
$sql = "select * from er_member where geo_longitude<=109 and geo_longitude>=107 and geo_latitude<=35 and geo_latitude>=33";
而你所说的有变量查询不到,而且$nowLongitude_max是一个数值,那么,你的sql运行后,应该是会变成这样:
$sql = "select * from er_member where geo_longitude<='109 ' and geo_longitude>=107 and geo_latitude<=35 and geo_latitude>=33";
你自己看看两条sql语句有什么不同啊?
echo输出的确是加引号这样子,数值不加引号你意思是写成 ‘$nowLongitude_max‘ 这种形式吗?我这样试了也查询不出来
php能解析双引号内的变量,你既然使用了双引号,那好加引号做什么呢?岂不是多此一举?
$sql = "select * from er_member where geo_longitude<=$nowLongitude_max and geo_longitude>=107 and geo_latitude<=35 and geo_latitude>=33";
或者
$sql = "select * from er_member where geo_longitude<={$nowLongitude_max} and geo_longitude>=107 and geo_latitude<=35 and geo_latitude>=33";
就算你实在要加引号,那也应该是:
$sql = "select * from er_member where geo_longitude<=" . $nowLongitude_max ." and geo_longitude>=107 and geo_latitude<=35 and geo_latitude>=33";
看来阁下不但sql语句的语法不是很清楚,就是php中的引号怎么用,都不清楚!
例外,给你一个建议, 如果比如你的数据表有10个字段,但你只需要使用5个字段,那就不建议用
selec * 来返回所有字段,虽然这样做,效果都差不多,但显然不够优化,就好比,你要一担沙子,但你偏偏用车装一车来,虽然沙子都够用,可岂不是费力又费钱?
select 字段1,字段2,.........用这种形式查询返回,你要几个字段就写几个字段,除非你所有字段都要用到,那就用*号
*号在计算机中是通配符,表示所有
目测是中英文符号问题,修改后:
$sql = "select * from er_member where geo_longitude<=" .$nowLongitude_max." and geo_longitude>=107 and geo_latitude<=35 and geo_latitude>=33";
这里“ .$nowLongitude_max. ”的双引号是中文的,所以楼主不加单引号才会报错,但是加了双引号后,例如$nowLongitude_max=109的话,变量的值就是就是"109",所以才查询不出
不加引号会提示错误
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in E:\PHPsite\test2.php on line 34
用我修改后的sql还是有问题?另外看我的资料加我
$sql = "select * from er_member where geo_longitude<='$nowLongitude_max' and geo_longitude>=107 and geo_latitude<=35 and geo_latitude>=33";
你把你sql语句换成这样的试试。