失礼します。

mysqlとphpを使ったOR検索のプログラムを作っています。
複数ワードで検索をした時に、

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

という例外がスローされました。
調べてみたところ、プレースホルダとパラメータの数が合っていない?という意味なのかと思ったのですがコードを見なおしても自分では理解できませんでした。

以下がコードです。(一部を抜粋)

//OR検索時
            elseif($count > 1){
                $stmt = $pdo->prepare($query);
                for($i=0; $i<$count; $i++){ //検索ワードの数だけ繰り返す
                    $keyword2[$i] = "'%".$keyword[$i]."%'"; //検索ワード1つ1つを%検索文字%にする
                    $holder = ':keyword'.$i;    //ホルダー用
                    $stmt->bindParam(':holder',$keyword2[$i],PDO::PARAM_STR);
                }
                $stmt->execute();
                $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
            }

どう直したらよいのでしょうか?
全コードが必要でしたら書き直します。

よろしくお願いします。

追記:$queryの中身です。

$query = 'SELECT * FROM goods WHERE ';  //クエリ前半
$sql ="";
if($data){
    $count = 1; //カウントを1にしておく
    //全角スペースはmb_convert_kana()関数で半角スペースに変換
    $datalist = mb_convert_kana($data, 's','UTF-8');
    //複数キーワードでの検索
    //if(stristr($datalist," ")){
        //検索ワードをスペースで分割して配列に格納
        $keyword = explode(" ",$datalist);

        //print_r ($keyword);
        //配列の数を数える
        $count = count($keyword);
        print $count;
        //空スペースで区切られた数によってSQL文を組み立てる
        for($i=0; $i<$count; $i++){//配列の数だけ繰り返す
            if($i!="0"){
                $sql = $sql." OR ";
            }
            $sql = $sql."name LIKE :keyword";
        }