SQL查询无效

时间:2015-07-31 18:53:28

标签: php mysql sql select

我已经尝试用可以在数据库中找到的东西替换变量,并且查询似乎工作正常。还尝试回显$ tour_type变量,它从url获取参数。这是代码:

if (isset ($_GET['tour_type']))
{
    $tour_type = mysqli_real_escape_string($conn, $_GET['tour_type']);
    $sql = "SELECT * FROM tour WHERE tour_type_1='$tour_type' OR tour_type_2='$tour_type' OR tour_type_3='$tour_type' OR tour_type_4='$tour_type' OR tour_type_5='$tour_type' AND type='buc'";
}
else
{
    $sql ="SELECT * FROM tour WHERE type='buc'";
}

问题是页面设置了tour_type参数。如果没有,它会从“else”获取查询,并且工作正常。

我无法显示错误,因此我可以对其进行调试(某些JavaScript在发生错误时不会让页面加载)所以必须调试它而不依赖于MySQL的错误消息。我想这与我在WHERE之后添加条件的方式有关,但无法弄清楚我做错了什么。

2 个答案:

答案 0 :(得分:4)

您混合了ANDOR条款而没有()来强制执行评估订单,因此您的查询正在执行

... WHERE A or B or C or (D and E)

当你真的想要它

... WHERE (A or B or C or D) AND (E)

正如其他人所指出的,你很容易受到sql injection attacks的攻击。享受你的服务器pwn3d。

更好(仍然注入易受攻击)的结构将是:

... WHERE '$tour_type' IN (tour_type1, tour_type2, ...) AND type='$buc';

答案 1 :(得分:1)

上面发布的代码中有无错误。确保。

  1. 发送数据方法getpost

    <form action='' method='post/get'....>
    
  2. Html字段名称分配了tour_type

    <input type='text' name='tour_type'...>