Как вы сказали, что вы используете PDO для подключения к базе данных, рекомендуется использовать команды SQL, не относящиеся к конкретным поставщикам, поскольку одной из основных функций PDO является возможность использовать разные СУБД, не меняя при этом никаких изменений. Команда SQL.
Чтобы написать простую, не зависящую от поставщика функцию поиска для использования PDO, вы можете использовать оператор SQL LIKE
. Пример SQL-запроса будет выглядеть примерно так:
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
Обязательно выделите разные поисковые термины, введенные пользователем, и запустите поиск по каждому слову, которое вы хотите найти. Кроме того, при поиске в нескольких столбцах обязательно отфильтруйте дублированные записи.
Другая вещь, на которую следует обратить внимание при использовании PDO, заключается в том, что %
, необходимый для оператора LIKE
, следует добавлять в данные $sth->execute()
, а не в обычную строку SQL. Для получения дополнительной информации см. stackoverflow вопрос.
Вот пример сценария, как может выглядеть простая функция поиска с использованием простого ANSI SQL:
$searchterm = trim($searchterm);
$searchterm = explode(' ', $searchterm);
$this->sql = "SELECT ID
FROM ".$db_prefix."_base
WHERE article_content_title_".$lang."
LIKE :string1
OR
article_content_text_".$lang."
LIKE :string2";
foreach ($searchterm as $value) {
$this->sth = $dbh_pdo->prepare($this->sql);
$this->sth->execute(array(':string1' => "%$value%", ':string2' => "%$value%"));
$this->sth->setFetchMode(PDO::FETCH_ASSOC);
while ($this->row = $this->sth->fetch()) {
$this->id[] = $this->row['ID'];
}
}
$this->id = array_unique($this->id);
$this->id = array_merge($this->id);
for ($i = 0; $i < count($this->id); $i++) {
if ($i == count($this->id) - 1) {
$this->searchResultID .= "id = ".$this->id[$i];
}
else {
$this->searchResultID .= "id = ".$this->id[$i]." OR ";
}
}
Обратите внимание, что это очень базовая функция поиска, без оценки результатов поиска, в том числе (например, выделение совпадающих терминов, основание, поиск синонимов и т. Д.)