Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在SQL中使用LIKE运算符时组合字段_Php_Mysql - Fatal编程技术网

Php 在SQL中使用LIKE运算符时组合字段

Php 在SQL中使用LIKE运算符时组合字段,php,mysql,Php,Mysql,好的,我正在从网页中检索fullname,以筛选客户列表,但我不确定哪部分是名字或姓氏,因此我需要运行类似的查询,如下所示: "SELECT sc.*, c.firstname, c.lastname,c.email FROM scoop_customer AS sc LEFT JOIN customer AS c ON sc.customer_id = c.customer_id WHERE c.firstname + ' ' + c.lastname LIKE '%".$fullname

好的,我正在从网页中检索
fullname
,以筛选客户列表,但我不确定哪部分是名字或姓氏,因此我需要运行类似的查询,如下所示:

"SELECT sc.*, c.firstname, c.lastname,c.email FROM scoop_customer AS sc LEFT JOIN 
customer AS c ON sc.customer_id = c.customer_id WHERE c.firstname + ' ' + c.lastname 
LIKE '%".$fullname."%'"
但它对我来说似乎不起作用,即使我尝试了很多次,通常它应该从DB返回值。你能告诉我哪里做错了吗?

使用
CONCAT(c.firstname',c.lastname)
使用
CONCAT(c.firstname',c.lastname)
试试看

试一试


CONCAT将很适合这些操作

请查看mysql文档

选择sc.*、c.firstname、c.lastname、c.email FROM scoop_客户作为sc LEFT JOIN
客户身份为sc.customer\u id=c.customer\u id,其中CONCAT(c.firstname,,,c.lastname)类似“%”。mysql\u real\u escape\u string($fullname)。“%”。CONCAT非常适合这些操作

请查看mysql文档

选择sc.*、c.firstname、c.lastname、c.email FROM scoop_客户作为sc LEFT JOIN
客户身份为sc.customer\u id=c.customer\u id,其中CONCAT(c.firstname,,,c.lastname)类似“%”。mysql\u real\u escape\u string($fullname)。“%”“%””

我将全名分为第一个和最后一个,并进行两次类似的检查,并在每个检查的开头去掉通配符%。以类似开头的串联和通配符将破坏名称字段上的任何索引


当然,如果你的表中只有几千个客户,那么索引将不会有多大作用,但是当你进入100000的时候,你会感觉到它

我会将全名分为第一个和最后一个,并进行两次类似的检查,在每个检查的开头去掉通配符%。以类似开头的串联和通配符将破坏名称字段上的任何索引


当然,如果你的表中只有几千个客户,那么索引将不会有多大作用,但是当你进入100000的时候,你会感觉到它

我添加了mysql\u real\u escape\u字符串,说明您以前没有逃逸过它。
对于这个问题,诀窍是
,而不是
CONCAT

".... WHERE c.firstname LIKE '%".mysql_real_escape_string($fullname)."%'
         OR c.lastname  LIKE '%".mysql_real_escape_string($fullname)."%'"

我添加了mysql\u real\u escape\u字符串,说明您以前没有逃逸过它。
对于这个问题,诀窍是
,而不是
CONCAT

".... WHERE c.firstname LIKE '%".mysql_real_escape_string($fullname)."%'
         OR c.lastname  LIKE '%".mysql_real_escape_string($fullname)."%'"

警告您的代码可能容易受到sql注入攻击。或者,如果搜索“%”且表足够大,则拒绝服务。警告您的代码可能容易受到sql注入攻击。或者,如果搜索“%”且表足够大,则拒绝服务