我正在创建一个按名称搜索的搜索。在数据库中,我有名(fname
)和姓(lname
)。
当您使用名字或姓氏而不是全名搜索时,搜索会起作用。
例如,输入'Joe'或'Smith'作为值将带回'Joe Smith'。输入'Joe Smith'作为值将不会带回任何记录。
$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();
?>
有没有办法在查询中连接fname
和lname
?还是有其他解决方案吗?
将其替换为您的查询: -
select concat(fname, ' ',lname) as name
from users
where name LIKE ? ;
您可以使用连接函数refference:
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();
?>
谢谢,