Я создаю поиск для поиска по имени. В базе данных у меня есть имя (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
в запросе? Или есть другое решение?
Замените это на свой запрос: -
select concat(fname, ' ',lname) as name
from users
where name LIKE ? ;
Вы можете использовать функцию функции конкатенации:
SELECT fname, lname
FROM users
WHERE CONCAT(fname, ' ', lname) LIKE ?
Не понятно, используете ли вы метод $ _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();
?>
Спасибо,
fname
& lanme
без объединения столбцов базы данных, поскольку это два отдельных столбца базы данных. Однако я только что показал вам, как использовать оператор PDO в соответствии со стандартной документацией, поскольку ваш оператор не соответствует стандартному оператору PDO. Вы можете увидеть руководство для более подробной информации. Другие пользователи уже дали вам ответы о том, как получить желаемый результат. Спасибо,
WHERE CONCAT(f_name, ' ', l_name) LIKE ?