我已经尝试用可以在数据库中找到的东西替换变量,并且查询似乎工作正常。还尝试回显$ 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
之后添加条件的方式有关,但无法弄清楚我做错了什么。
答案 0 :(得分:4)
您混合了AND
和OR
条款而没有()
来强制执行评估订单,因此您的查询正在执行
... 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)
上面发布的代码中有无错误。确保。
发送数据方法为get
或post
<form action='' method='post/get'....>
Html字段名称分配了tour_type
<input type='text' name='tour_type'...>