2014-07-14 153 views
0

我正在尝试创建一个动态sql查询,将我的cat列与用户在表单中输入的任何内容进行比较。我的想法是,我将能够获取一组动态值,然后将它们与cat列进行比较。这就是我试图做的:动态MySQL查询

// Loop to get the array of values from form 
$get_arr = $_GET; 
foreach ($get_arr as $get) { 
    $var = "AND cat LIKE $get"; 
} 
// SQL query 
$sql = "SELECT * FROM items 
WHERE title LIKE 'this' 
AND description LIKE 'that' 
'%$var%'"; 

它不工作 - $var始终显示为空白。解决方案是什么?

+0

从一开始调试,'的print_r($ _ GET);' –

+0

解析错误并不能帮助。 – AbraCadaver

+1

现在,您只将'$ var'变量分配给最后一个'$ _GET'元素。你知道这个,对吗?而且,如果您不知道这一点,您的代码也容易受到SQL注入的影响。 – Max

回答

2

你有几个问题。

  1. 你不是逃避输入,所以你受SQL注入或语法错误。

  2. 您需要在LIKE参数周围加上引号。

  3. 您每次通过循环覆盖$var而不是附加到它。

  4. 您不会在表达式周围放置任何空格。

  5. 你把%围绕整个$var,它应该在LIKE参数里面。

foreach ($get_arr as $get) { 
    $get = mysqli_real_escape_string($conn, $get); 
    $var .= " AND cat like '%$get%'"; 
} 

$sql = "SELECT * FROM items 
     WHERE title LIKE '%this%' 
     AND description LIKE '%that%' 
     %var"; 
+0

非常感谢,你真的帮助我!注意,第三行缺少一个分号,它应该是'$ var。=“,而猫就像'%$ get%'”;'并且在最后一行中,缺少'$'符号。但再次感谢 – terf