Php 如何';追加';将一个mysql列复制到另一个mysql列

Php 如何';追加';将一个mysql列复制到另一个mysql列,php,mysql,mysqli,Php,Mysql,Mysqli,我利用LIKEmysqliquery在我的网站上建立了一个搜索功能 即 假设我有一个联系人 f_姓名:鲍勃 姓名:陈 如果我在输入字段中键入“bob”,那么如果我键入“chan”,它也会成功地找到bob 我想做的是键入“bob chan”并让它找到联系人 我想有什么方法可以“附加”mysqli列?类似于 $contact = $mysqli->query("SELECT * FROM contact WHERE f_name.' '.l_name LIKE '%$searching%'

我利用LIKE
mysqli
query在我的网站上建立了一个搜索功能

假设我有一个联系人

  • f_姓名:鲍勃
  • 姓名:陈
如果我在输入字段中键入“bob”,那么如果我键入“chan”,它也会成功地找到bob

我想做的是键入“bob chan”并让它找到联系人

我想有什么方法可以“附加”mysqli列?类似于

$contact = $mysqli->query("SELECT * FROM contact WHERE f_name.' '.l_name LIKE '%$searching%'");
在这种情况下,正确的语法是什么?

您可以使用函数连接多个值

SELECT * FROM contact WHERE concat( f_name, ' ', l_name ) LIKE '%$searching%'
文档参考

CONCAT(str1、str2等)

返回连接参数后产生的字符串。也许 有一个或多个论点。如果所有参数都是非二进制字符串, 结果是一个非二进制字符串。如果参数包含任何二进制 字符串,结果是一个二进制字符串。数值参数是 转换为其等效的非二进制字符串形式

CONCAT()
如果任何参数为NULL,则返回NULL

mysql> SELECT CONCAT('My', 'S', 'QL');
       'MySQL' 
mysql> SELECT CONCAT('My', NULL, 'QL');
       NULL 
mysql> SELECT CONCAT(14.3);
       '14.3'
对于带引号的字符串,可以通过放置 相邻的字符串:

 mysql> SELECT 'My' 'S' 'QL';
        'MySQL'

MySQL中用于字符串连接的表达式将使用
CONCAT
函数,例如

  CONCAT(f_name,' ',l_name)

虽然您可以在数据库中定义字段,但如果这样做,您将遇到问题。例如,假设您使用
concat(f_name,,,l_name),如%search%
,搜索
bob chan
,您不会在结果集中得到
bobby chan
,因为
bob chan
不在
bobby chan
(中间有
by

更好的选择是拆分搜索字符串:
$parts=explode(“”,$search)
,然后使用以下原始筛选器:

WHERE f_name LIKE '%$parts[0]%' OR l_name LIKE '%$parts[1]%'

作为旁注,您需要通过转义字符串来防止注入。

非常好的一点。带有绑定占位符的预处理语句是阻止SQL注入的好模式。您是否知道一个简单的mysqli条目,它将覆盖所有可能的单个搜索选项连接?允许用户键入例如“fname、lastname、郊区”或“郊区、lastname、firstname”。基本上涵盖了用户可能键入的条目的任何变化,而无需考虑所有可能性。
WHERE f_name LIKE '%$parts[0]%' OR l_name LIKE '%$parts[1]%'