0

このイベント名に類似したイベント名を 3 つ表示しようとしています。

現在、このコードをビルドするFALSEと戻りますが、その理由はわかりません:

呼び出し(ここでは問題ありません):

// get 3 similar events (by name)
$nameArray      = explode(" ", strtolower($name));
var_dump($similarEvents     = $event->getSimilarEvents($event_id, $nameArray));

名前が似ている 3 つのイベントを取得するメソッド

public function getSimilarEvents($event_id, $nameArray){

$uniqueWords = array();

// list of common words we dont want to search by
$commonWords = array('one');

// Build array of words that dont match common words
$uniqueWords = array_diff($nameArray, $commonWords);

// add each AND per word in array
foreach($uniqueWords AS $word){
    $x++;
    if($x==1){
        $like .= "event_name LIKE %$word% ";
    }else{
        $like .= " AND event_name LIKE %$word%";
    }
}

// build start of mysql query
$query = "SELECT event_id, event_name FROM adrenaline_junkies_uk_events WHERE ? AND event_id <> ? LIMIT 3";
$stmt = $this->dbh->prepare($query);
$stmt->bindParam(1, $like, PDO::PARAM_STR);
$stmt->bindValue(2, $event_id, PDO::PARAM_INT);
$stmt->execute();
var_dump($query);
var_dump($like);
if($stmt->rowCount() > 0){
    return $stmt->fetchAll();
}else{
    return FALSE;
    }
}

の戻り値var_dump:$query

string(95) "SELECT event_id, event_name FROM adrenaline_junkies_uk_events WHERE ? AND event_id <> ? LIMIT 3"

の戻り値var_dump:$like

string(82) "event_name LIKE %mountain% AND event_name LIKE %test% AND event_name LIKE %event%"

FALSE同様の名前を持つ別のイベントを返す必要があるときに、メソッドが返されています。これはデータベースに確実に存在します。

編集:

最初のイベントのタイトル:

男対山

2回目のイベントタイトル

マウンテンテストイベント1

ご覧のとおり、他のイベントは単語を共有しているため、他のイベントを返す必要がありますmountain

ありがとう

4

0 に答える 0