我正在使用一些高级的mysql查询来搜索数据库中的一些数据。但是,当我将LIKE WHERE developer LIKE %Lanterra%
添加到查询中时,它将不起作用。
工作查询。
$query = sprintf("SELECT *, ( 3959 * acos( cos( radians('%s') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( latitude ) ) ) ) AS distance FROM condo HAVING distance < '%s' ORDER BY distance LIMIT 0 , 2500",
mysql_real_escape_string($center_lat),
mysql_real_escape_string($center_lng),
mysql_real_escape_string($center_lat),
mysql_real_escape_string($radius));
当我添加LIKE函数时。(不工作)
$query = sprintf("SELECT *, ( 3959 * acos( cos( radians('%s') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( latitude ) ) ) ) AS distance FROM condo WHERE developer LIKE %Lanterra% HAVING distance < '%s' ORDER BY distance LIMIT 0 , 2500",
mysql_real_escape_string($center_lat),
mysql_real_escape_string($center_lng),
mysql_real_escape_string($center_lat),
mysql_real_escape_string($radius));
SELECT * FROM `table` WHERE myfield like '%abc%';
您必须使用(单引号)
我认为sprintf()
函数无法将sql语句和存储区包含到变量中。
试试这样的东西:
$query = "SELECT *, ( 3959 * acos( cos(
radians('".mysql_real_escape_string($center_lat)."') ) * cos( radians( latitude ) )
* cos( radians( longitude ) - radians('".mysql_real_escape_string($center_lng)."') )
+ sin( radians('".mysql_real_escape_string($center_lat)."') )
* sin( radians( latitude ) ) ) ) AS distance FROM condo
HAVING distance < '".mysql_real_escape_string($radius))."'
ORDER BY distance LIMIT 0 , 2500";
然后您就可以执行查询了。
但是通过mysql_*变得越来越强大。
周在评论中说的是真的:
- 考虑将
mysqli
与已准备好的语句一起使用,或将PDO与已准备的语句一起,它们要安全得多
请注意:
- 在sprintf字符串内部,格式为"%"的字符必须转义为"%%"
- 只有字符字符串必须使用mysql_real_eescape_string单引号
- mysql_*函数已弃用,必须将prepared语句与mysqli或PDO一起使用:
- 与mysqli一起准备声明
- 与PDO一起编制报表
嵌套查询:
$query = sprintf("SELECT * FROM (SELECT *,
( 3959 * acos( cos( radians( %F ) ) * cos( radians( latitude ) ) *
cos( radians( longitude ) - radians( %F ) ) + sin( radians( %F ) ) *
sin( radians( latitude ) ) ) ) AS distance FROM condo WHERE
developer LIKE '%%Lanterra%%') WHERE distance < %F
ORDER BY distance LIMIT 0 , 2500",
floatval($center_lat),
floatval($center_lng),
floatval($center_lat),
floatval($radius)
);
原始查询:
$query = sprintf("SELECT *, ( 3959 * acos( cos( radians( %F ) ) * cos( radians( latitude ) ) *
cos( radians( longitude ) - radians( %F ) ) + sin( radians( %F ) ) *
sin( radians( latitude ) ) ) ) AS distance FROM condo HAVING distance < %F
WHERE developer LIKE '%%Lanterra%%'
ORDER BY distance LIMIT 0 , 2500",
floatval($center_lat),
floatval($center_lng),
floatval($center_lat),
floatval($radius)
);
致以最良好的问候。
您可以尝试使用双引号"我从来没有在没有它们的情况下使用LIKE关键字。
SELECT * FROM `db`.`table` WHERE `time` LIKE "%20150105%";