Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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_Search_Pdo - Fatal编程技术网

PHP Mysql搜索查询

PHP Mysql搜索查询,php,mysql,search,pdo,Php,Mysql,Search,Pdo,你好,我有一个简单的搜索查询,我面对的是当有人写下他想要搜索的用户的唯一名字时,我的查询会找到它,当有人只在输入中写下姓氏并发布时,它也会显示出来,但是当用户在输入中同时写下名字和姓氏时,即使用户存在,也找不到。$q查询的最后一部分,我写了名字和类似姓氏的部分不起作用,我知道我的逻辑不好,但我如何修复它 try { $q = "SELECT * FROM `members` WHERE `first_name` LIKE :search_string OR `last_n

你好,我有一个简单的搜索查询,我面对的是当有人写下他想要搜索的用户的唯一名字时,我的查询会找到它,当有人只在输入中写下姓氏并发布时,它也会显示出来,但是当用户在输入中同时写下名字和姓氏时,即使用户存在,也找不到。$q查询的最后一部分,我写了名字和类似姓氏的部分不起作用,我知道我的逻辑不好,但我如何修复它

    try {
        $q = "SELECT * FROM `members` WHERE `first_name` LIKE :search_string OR `last_name` LIKE :search_string OR `first_name` AND `last_name` LIKE :search_string";
        $q_do = $db->prepare($q);
        $q_do->execute( array("search_string"=>'%'.$query.'%') );
        $number = $db->query("SELECT FOUND_ROWS()")->fetchColumn();
    } catch(PDOException $e) {
        $log->logError($e." - ".basename(__FILE__));
    }
多谢各位

SELECT * 
FROM `members` 
WHERE `first_name` LIKE :search_string 
   OR `last_name` LIKE :search_string 
   OR `first_name` AND `last_name` LIKE :search_string;
是运算符而不是连接符

SELECT * 
FROM `members` 
WHERE `first_name` LIKE :search_string 
   OR `last_name` LIKE :search_string 
   OR CONCAT(`first_name`,' ', `last_name`) LIKE :search_string;
因此,您所做的不是:

用户输入“First-Last”

您可以搜索:

First like '%First Last%' or Last  like '%First Last%' ...
您需要使用全文搜索索引

或者类似的

尝试使用concat:

$q = "SELECT * FROM `members` WHERE `first_name` LIKE :search_string 
OR `last_name` LIKE     :search_string 
OR concat(`first_name` , ' ', `last_name`) LIKE :search_string";
试试这个:

$query = explode(" ", $query);
if(count($query)>1){
    $fname = $query[0];
    $lname = end($query);
}else{
    $fname = $query[0];
    $lname = $query[0];
}
$q = "SELECT * FROM `members` WHERE `first_name` LIKE :fname OR `last_name` LIKE :lname";
$q_do = $db->prepare($q);
$q_do->execute( array('fname' => "%$fname%", 'lname' => "%$lname%") );

最简单的搜索查询。。试试这个,它的工人。


TableName
中选择*WHERE
title
如“%Your Search Text%”

这是用户写入搜索输入的内容。+1是一个聪明的答案,它可能适合询问者想要做的事情,但全文搜索仍然是一个更好的方法。当然,但可能有少于4个字符的名称,为此,您必须编辑my.cnf。您可以在这两个字段上添加一个组合索引,以使其快速处理大量行。全文搜索或任何搜索引擎都是更好的选择。因为这些问题往往会很快变得复杂。千万不要这样做。使用合适的工具。全文搜索任何搜索引擎都会做得更好。你的解决方案会产生更多的问题!