连接查询中的列以使用“LIKE”运算符

问题描述 投票:0回答:3

我正在创建一个按名称搜索的搜索。在数据库中,我有名(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();
?>

有没有办法在查询中连接fnamelname?还是有其他解决方案吗?

php mysql
3个回答
1
投票

将其替换为您的查询: -

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

0
投票

您可以使用连接函数refference

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

-1
投票

目前尚不清楚是否使用$ _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();
?>

谢谢,

© www.soinside.com 2019 - 2024. All rights reserved.