我的编码在localhost上运行正常。但是在我的网站上它没有,我猜它应该是MARIADB版本10.1.24
以下是代码:
$search1 = @$_GET['valuelo'];
$search2 = @$_GET['valuear'];
$search3 = @$_GET['valueco'];
$search4 = @$_GET['valuero'];
$search5 = @$_GET['valuefl'];
$search6 = @$_GET['valuelu'];
$search7 = @$_GET['valuetr'];
$search8 = @$_GET['valuepo'];
$sql = "SELECT * FROM location, area, condition, rooms, floor, luxury, trendy, pool
WHERE 'location' LIKE '%$search1%'
AND 'area' LIKE '%$search2%'
AND 'condition' LIKE '%$search3%'
AND 'rooms' LIKE '%$search4%'
AND 'floor' LIKE '%$search5%'
AND 'luxury' LIKE '%$search6%'
AND 'trendy' LIKE '%$search7%'
AND 'pool' LIKE '%$search8%'";
这是错误:
错误:无法执行
SELECT *
FROM location, area, condition, rooms, floor, luxury, trendy,
pool
WHERE locationbw LIKE '%%'
AND area LIKE '%%'
AND condition LIKE '%%'
AND rooms LIKE '%%'
AND floor LIKE '%%'
AND luxury LIKE '%%'
AND trendy LIKE '%%'
AND pool LIKE '%%'
您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以便在条件,房间,楼层,豪华,时尚,游泳池附近使用正确的语法。在哪里,位置等等...' %%' '在第1行
请帮帮我!我看对了一切
答案 0 :(得分:1)
将table-name和column-name包含在backquote(`)中,else查询将在您使用MariaDB关键字的位置中断。在您的查询“条件”是MariaDB关键字
“SELECT * FROM`position`,`area`,`condition`,`room`,`floor`,`luxury`,`fashion`,`pool` WHERE`position` LIKE'%$ search1%' AND`area` LIKE'%$ search2%' AND`condition` LIKE'%$ search3%' 和`rooms` LIKE'%$ search4%' 和`floor` LIKE'%$ search5%' 和`luxury` LIKE'%$ search6%' 和'时尚`LIKE'%$ search7%' AND`pool` LIKE'%$ search8%'“;
答案 1 :(得分:0)
您的SQL语句在很多方面都不正确,令我感到惊讶的是它在您的开发环境中产生了任何好处。
在这些情况下继续进行的一种好方法是使用UNION
语句将每个表搜索的结果连接到单个输出中。如果表共享最少数量的相同名称和类型字段(信号,Id
和Name
):
SELECT 'Location' AS Type, Id AS ID, Name AS Ref
FROM location
WHERE location_field LIKE '%$search1%'
UNION
SELECT 'Area' AS Type, Id AS ID, Name AS Ref
FROM area
WHERE area_field LIKE '%$search2%'
UNION
SELECT 'Room' AS Type, Id AS ID, Name AS Ref
FROM rooms
WHERE rooms_field LIKE '%$search3%'
UNION
...
最重要的是,对搜索字段值的额外检查将有助于构建(或跳过)WHERE
子句。最后但并非最不重要的是,使用prepared statements而不是手动构建查询字符串。