Объединить столбцы в запросе, чтобы использовать оператор «LIKE»

0

Я создаю поиск для поиска по имени. В базе данных у меня есть имя (fname) и фамилия (lname).

Поиск выполняется при поиске по имени или фамилии, но не по имени.

например, ввод "Джо" или "Смит", поскольку значение вернет "Джо Смит". Ввод "Джо Смит" в качестве значения не приведет к восстановлению записей.

$value = "%".$search_val."%";
$query = "SELECT fname, lname FROM users WHERE (fname LIKE ? OR lname LIKE ?)";

if ($stmt = $conn->prepare($query)) {

    $stmt->bind_param('ss', $value, $value);
    $stmt->execute();
    $stmt->bind_result($fname, $lname);
    /* fetch values */
    while ($stmt->fetch()) {
        printf ("%s %s\n <br>", $fname, $lname);
    }
    /* close statement */
    $stmt->close();
}

/* close connection */
$conn->close();
?>

Есть ли способ lname fname и lname в запросе? Или есть другое решение?

Теги:

3 ответа

1
Лучший ответ

Замените это на свой запрос: -

select concat(fname, ' ',lname) as name      
from users       
where name LIKE ? ;        
0

Вы можете использовать функцию функции конкатенации:

SELECT fname, lname 
FROM users 
WHERE CONCAT(fname, ' ', lname) LIKE ?
-2

Не понятно, используете ли вы метод $ _GET, $ _POST или $ _REQUEST для получения поискового запроса. Вы также привязали свой результат, который я никогда не видел в любом стандартном заявлении pdo. Вы сделали свой комплекс заявлений PDO. Однако вы можете попробовать следующее:

<?php
//With positional placeholder & bindParam method

$search_val = $_REQUEST['search_val'];
$value1  = "%$search_val%";
$value2  = "%$search_val%";


$query = "SELECT fname, lname FROM users WHERE fname LIKE ? OR lname LIKE ?";

if ($stmt = $conn->prepare($query)) {
$stmt->bindParam(1, $value1);
$stmt->bindParam(2, $value2);
$stmt->execute();

/* fetch values */
while ($stmt->fetch()) {
printf ("%s %s\n <br>", $fname, $lname);
}
/* close statement */
$stmt->close();
}

/* close connection */
$conn->close();
?>

<?php
//With named placeholder & bindValue method

$search_val = $_REQUEST['search_val'];
$value  = "%$search_val%";


$query = "SELECT fname, lname FROM users WHERE fname LIKE :value OR lname LIKE :value";

if ($stmt = $conn->prepare($query)) {
$stmt->bindValue(':value', $value);
$stmt->execute();

/* fetch values */
while ($stmt->fetch()) {
printf ("%s %s\n <br>", $fname, $lname);
}
/* close statement */
$stmt->close();
}

/* close connection */
$conn->close();
?>

Спасибо,

  • 0
    Это работает точно так же, как моя попытка, но не решает проблему поиска полного имени.
  • 0
    Вы не получите результаты поиска для fname & lanme без объединения столбцов базы данных, поскольку это два отдельных столбца базы данных. Однако я только что показал вам, как использовать оператор PDO в соответствии со стандартной документацией, поскольку ваш оператор не соответствует стандартному оператору PDO. Вы можете увидеть руководство для более подробной информации. Другие пользователи уже дали вам ответы о том, как получить желаемый результат. Спасибо,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню