Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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/MySQL使用变量在字符串中搜索结果_Php_Mysql_Sql Like - Fatal编程技术网

PHP/MySQL使用变量在字符串中搜索结果

PHP/MySQL使用变量在字符串中搜索结果,php,mysql,sql-like,Php,Mysql,Sql Like,我有一个查询没有提供结果: $name = "John Smith"; $query = "SELECT * FROM my_table WHERE lname LIKE '%$name%' AND fname LIKE '%$name%'"; 数据库中的lname将被列为Smith 数据库中的fname可能会被列为John S 有些条目的名字有中间的首字母,有些则没有 此外,在我查询此信息的页面上,姓名作为一个字符串拉入,而不是名字和姓氏字符串。现有代码的限制 因此,我试图在字符串$nam

我有一个查询没有提供结果:

$name = "John Smith";

$query = "SELECT * FROM my_table WHERE lname LIKE '%$name%' AND fname LIKE '%$name%'";
数据库中的lname将被列为Smith 数据库中的fname可能会被列为John S

有些条目的名字有中间的首字母,有些则没有

此外,在我查询此信息的页面上,姓名作为一个字符串拉入,而不是名字和姓氏字符串。现有代码的限制


因此,我试图在字符串$name中搜索姓氏和名字。我想我做错了。这可能吗?或者有其他方法可以做到这一点吗?

我不知道到底是什么问题,但下一个查询可以帮助您:

SELECT * FROM my_table WHERE '$name' LIKE CONCAT('%', lname ,'%') and '$name' LIKE         CONCAT('%',fname ,'%')

如果您需要检查lname是否包含在$name中,那么您显示的查询不正确,您正在检查相反的情况。

如果我正确理解您的意思,该怎么办:

SELECT *
FROM my_table
WHERE '$name' like concat(fname,' %')
  AND '$name' like concat('% ',lname)
要搜索fname字段,它在搜索的全名后包含一个“%”。要搜索lname字段,它在全名前包含“%”

编辑:Mario使用REGEXP的好评论的一个细微变化:


由于您提到无法分解参数why?,因此将使用replace相应地替换空格。

我有解决方案。。你可以这样试试

$name = "John Smith";

$query = "SELECT * FROM my_table WHERE fname LIKE substring_index(".$name.",' ',1) AND fname LIKE substring_index(".$name.",' ',-1)";

echo$query;并直接在MySQL中运行它。您正在lname和fname字段中搜索字符串John Smith,但找不到任何内容,因为内容在这两个字段中都被拆分。$query=SELECT*从my_表中,lname类似“%$name%”或fname类似“%$name%”;如果我有丹·史密斯和约翰·沃尔特斯呢?我需要确保字符串John Smith(名字或姓氏)同时出现在lname和fname中。您使用哪个版本的mysql?我会稍微修改一下:从foo2中选择*,其中John Smith出现在fname、lname或CONCAT_WS、fname、lname REGEXP John.*Smith@MarioMueller-我喜欢REGEXP选项-我将编辑帖子以显示。谢谢@MarioMueller-事实上,这需要修改$name的输入,我认为OP无法做到这一点。如果OP可以改变输入,那么我也喜欢这个选项。是的,你是对的。由于原值的不变性,这可能是不可接受的,但我可能值得一试@MarioMueller-我更新了一个版本,该版本应该可以使用SQL替换输入。到目前为止:谢谢!
$name = "John Smith";

$query = "SELECT * FROM my_table WHERE fname LIKE substring_index(".$name.",' ',1) AND fname LIKE substring_index(".$name.",' ',-1)";