2017-01-16 83 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