スローされた例外の原因と対処方法が分からない
失礼します。
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";
}