PHP搜索SQL - 网站

时间:2018-03-13 15:50:07

标签: php mariadb

我的编码在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行

请帮帮我!我看对了一切

2 个答案:

答案 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语句将每个表搜索的结果连接到单个输出中。如果表共享最少数量的相同名称和类型字段(信号,IdName):

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而不是手动构建查询字符串。

相关问题