SQL — ВЫБЕРИТЕ, ГДЕ столбец = ИСТИНА И: input = `строка`

Я делаю простой поисковик в PHPPDO) а также MySQL, Его цель — найти товары на складе.
мой TABLE phone имеет COLUMN snowden который является TINYINT (содержащий 0 или же 1). Я хочу быть в состоянии получить результаты, если phone.snowden является true а также ввод пользователя 'snowden',

Вот короткая версия моего запроса: (:search_0 это ввод пользователя. Это подготовленный запрос для PDO)

SELECT * FROM phone WHERE phone.snowden = 1 AND :search_0 = `snowden`

Конечно, реальный запрос на самом деле длиннее (объединение нескольких таблицы и поиск во многих столбцы) но все работает кроме этого.
Когда я пытаюсь найти 'snowden' Я не получаю результата (имеется в виду ключевые слова не были найдены ни в одном столбце а также случай «сноудена» не работает).

  • Я что-то скучаю по синтаксис ?
  • Как я могу выполнить этот запрос так, как я пытался?
  • Как я могу добиться этого путем сравнения с именем столбца (если это лучший способ продолжить)?

Вот полный код, который я использую:

$keywords = explode(" ", $_POST['query']);
$query = "SELECT phone.id, phone.imei, phone.model, phone.color, phone.capacity, phone.grade, phone.sourcing, phone.entry, phone.canal, phone.sale, phone.state, phone.snowden FROM phone LEFT JOIN capacity ON (phone.capacity = capacity.id) LEFT JOIN color ON (capacity.color = color.id) LEFT JOIN model ON (color.model = model.id) LEFT JOIN grade ON (phone.grade = grade.id) WHERE ";
$query_array = array();
for ($i = 0; $i < count($keywords); $i += 1) {
$query .= " ( phone.imei LIKE :search_" . $i;
$query .= " OR phone.sourcing LIKE :search_" . $i;
$query .= " OR phone.canal LIKE :search_" . $i;
$query .= " OR phone.entry LIKE :search_" . $i;
$query .= " OR phone.sale LIKE :search_" . $i;
$query .= " OR phone.state LIKE :search_" . $i;
$query .= " OR ( phone.snowden = 1 AND ':search_" . $i . "' = `snowden` )";
$query .= " OR model.name LIKE :search_" . $i;
$query .= " OR color.name LIKE :search_" . $i;
$query .= " OR capacity.amount LIKE :search_" . $i;
$query .= " OR grade.name LIKE :search_" . $i;
if ($i != (count($keywords) - 1)) {
$query .= " ) AND ";
} else {
$query .= " ) ";
}
if (strtolower($keywords[$i]) == 'snowden') {
$query_array['search_' . $i] = $keywords[$i];
} else {
$query_array['search_' . $i] = "%" . $keywords[$i] . "%";
}
}
$query .= "ORDER BY phone.id DESC";
$results = $stock->prepare($query);
$results->execute($query_array);

0

Решение

замени свою линию

$query .= " OR ( phone.snowden = 1 AND ':search_" . $i . "' = `snowden` )";

с

$query .= " OR ( phone.snowden = 1 AND 'snowden'= :search_" . $i )";
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector