2017-01-16 85 views
1

我正在改进项目后台中的搜索栏。
我想打一个研究在protfolio,加入category以包括类的名字在可用关键字。看起来很简单,但我会得到的唯一信息是:PHP SQL - 左加入+其中+或

警告: 'where子句' 中 1054未知列 'search_0':PDOStatement对象::执行():SQLSTATE [42S22]:列未找到[...]

我创建的SQL查询动态执行它,就像在此之前:

$keywords = explode(" ", $_POST['search']); 
$query = "SELECT * FROM portfolio LEFT JOIN category 
      ON portfolio.portfolio_category_id = category.category_id 
      WHERE "; 

$query_array = array(); 
for ($i = 0; $i < count($keywords); $i += 1) { 
    $query .= "portfolio.portfolio_title LIKE :search_" . $i; 
    $query .= " OR category.category_name LIKE search_" . $i; 

    if ($i != (count($keywords) - 1)) { 
     $query .= " OR "; 
    } 
    $query_array['search_' . $i] = "%" . $keywords[$i] . "%"; 
} 

$list_portf = $bdd->prepare($query); 
$list_portf->execute($query_array); 

我不是在SQL裂纹我真的不明白的地方是错误(我在我发现的问题中没有找到答案)。谢谢。

+0

你能'执行查询前回声$ query_array'?这应该有助于我们找到错误 – KuKeC

+0

@KuKeC我错过了一个冒号(我得到的答案是正确的)。对不起! 我正在结束这个问题 – AymDev

+0

我觉得我必须注意,用户的搜索词永远不应该直接插入SQL查询中,而不需要过滤。这是一个SQL注入漏洞的定义。也许看到:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – pseudocoder

回答

1

看来你错过了结肠:你的第二个裁判之前搜索_

" OR category.category_name LIKE :search_" . $i; 
+0

好的,我正在结束这个问题。真对不起 ! – AymDev

+0

@AymDev没什么可抱歉的..每个人都会犯错...如果我的回答是正确的,只需将其标记为已接受。 – scaisEdge

+0

我显然不能在6分钟之前(但我会这样做)。 但我的问题不会帮助任何人,我自己标记它,因为我不能删除它。 – AymDev