2017-01-16 14 views
1

プロジェクトのバックオフィスで検索バーを改良しています。
私が利用可能キーワードカテゴリの名前を含めることcategoryテーブルに入社、protfolioテーブルの研究をしたいです。シンプルなようだが、私は買ってあげるだけのメッセージは次のとおりです。PHP SQL - 左結合+ +または

警告:PDOStatementには::)(実行します。SQLSTATE [42S22]:見つからないカラム: 1054不明な列 'search_0を' 'where句' 内に[...]

私はこのように、それを実行する前に、動的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

をsearch_ためにあなたの二refはあなたが 'クエリを実行する前に$ 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