我正在改进项目后台中的搜索栏。
我想打一个研究在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裂纹我真的不明白的地方是错误(我在我发现的问题中没有找到答案)。谢谢。
你能'执行查询前回声$ query_array'?这应该有助于我们找到错误 – KuKeC
@KuKeC我错过了一个冒号(我得到的答案是正确的)。对不起! 我正在结束这个问题 – AymDev
我觉得我必须注意,用户的搜索词永远不应该直接插入SQL查询中,而不需要过滤。这是一个SQL注入漏洞的定义。也许看到:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – pseudocoder