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+;MYSQL_Php_Mysql_Sql_Search - Fatal编程技术网

针对数据库中的多个列/表搜索多个关键字。PHP+;MYSQL

针对数据库中的多个列/表搜索多个关键字。PHP+;MYSQL,php,mysql,sql,search,Php,Mysql,Sql,Search,我正在为我的网站()制作一个网站搜索,目前已成功使用关键字在多个表中执行搜索,该关键字遵循此问题中给出的答案- 我目前正在搜索3个以上的表。 -俱乐部 -事件 -音乐 我有以下疑问: $keystring = $mysqli->real_escape_string($_POST["s"]); $keystring = strtoupper($keystring); $key = "%".$keystring."%"; $search_stmt = $mysqli->prepare

我正在为我的网站()制作一个网站搜索,目前已成功使用关键字在多个表中执行搜索,该关键字遵循此问题中给出的答案-

我目前正在搜索3个以上的表。
-俱乐部
-事件
-音乐

我有以下疑问:

$keystring = $mysqli->real_escape_string($_POST["s"]);
$keystring = strtoupper($keystring);
$key = "%".$keystring."%";

$search_stmt = $mysqli->prepare("SELECT id, name, type AS 'col3', city AS 'col4', 'Club' AS 'table' 
                                 FROM studentnights_clubs 
                                 WHERE UCASE(name) LIKE ? OR UCASE(city) LIKE ?
                                 UNION
                                 SELECT id, name, description AS 'col3', image AS 'col4', 'Event' AS 'table' 
                                 FROM studentnights_events 
                                 WHERE UCASE(name) LIKE ?
                                 UNION
                                 SELECT id, name, '' AS 'col3', '' AS 'col4', 'Genre' AS 'table' 
                                 FROM studentnights_music 
                                 WHERE UCASE(name) LIKE ?
                                 ORDER BY
                                    CASE
                                        WHEN name LIKE ? THEN 1
                                        WHEN name LIKE ? THEN 3
                                        ELSE 2
                                    END
                                LIMIT 10");
$search_stmt->bind_param('ssssss', $key, $key, $key, $key, $key, $key);
$search_stmt->execute();
$search_stmt->store_result();
$search_stmt_num = $search_stmt->num_rows;
$search_stmt->bind_result($id, $name, $col3, $col4, $table);

注意:需要在音乐表中输入空白列才能使查询正常工作,联合查询需要在每个表中选择相同数量的列。

关于实际问题。然而,通过上面的查询,我想用一个关键字搜索多个表,以便将多个关键字考虑在内。

通过让您实时查看,这是最容易解释的

转到
在搜索栏中输入“mint”,不要按Enter键,让ajax完成它的工作。
请注意,将显示两个俱乐部:薄荷俱乐部(利兹)、薄荷俱乐部(伦敦)。
将“利兹”添加到搜索栏中(即“薄荷利兹”)。
请注意,两个俱乐部都消失了。

我想要的是,当在搜索栏中键入“mint leeds”时,它会显示利兹的mint club,
因为俱乐部的“名称”是“薄荷俱乐部”(因此包含“薄荷”一词)
它在一个叫做“利兹”的“城市”

感谢您的阅读,我知道任何帮助都将受到极大的感谢



编辑:Stament已更新,以便参数化。

您可以看到这一点,我开始认为可能会将搜索字符串拆分为不同的关键字,对每个关键字运行查询,将每一行添加并附加到数组中,然后在数组中循环以显示数据。尝试得不错,但您(可能)是仍然对SQL注入开放。你应该使用,句号。特别是因为您似乎已经在使用mysqli了。我一直在使用参数。我猜你的意思是-$mysqli->bind_parma('ss',$var1,$var2);我不认为它会起作用,因为在那句话中,我的“?”会被引用。然而,我认为我可以将变量设置为“%.”$key.“%。然后把它放进去。我会试着让你知道它是如何进行的一个检查,原始问题。