当前位置: 首页 > 面试题库 >

使用PHP和MySQL创建动态搜索查询

闾丘康安
2023-03-14
问题内容

我正在尝试根据用户输入创建动态搜索查询。

  • 用户可以不填写任何,部分或全部字段。
  • 该查询在表中搜索符合所有要求的记录。

现在,我已经完成了研究,并且发现了执行此操作的多种方法。但是它们都不起作用,如果起作用了,那么它们就不可行了。

试图:

目前,我正在创建这样的查询:

SELECT * 
FROM assignments 
WHERE (id = $id OR id = '') 
  AND (field1 = $field1 OR field1 = '')

该查询有效,但前提是您填写了所有字段。

我是从stackoverflow文章中得到的,我再也找不到了,它说:

如果用户已填写输入字段,它将检查第一个规则“ id = $ input”,如果用户未指定任何输入,则将检查“ id
=”“,并在检查时将检查只是归还一切。因为它逃避了空搜索规则。

但是,正如您可能已经知道的那样,它是行不通的。

您如何建议我解决这个问题?


问题答案:

尝试获取所有发布变量,并遍历它们以查看它们是否有效,然后构建查询

<?php
$id = $_POST[id];
$field1 = $_POST[field1];
$field2 = $_POST[field2];
$field3 = $_POST[field3];

$whereArr = array();
if($id != "") $whereArr[] = "id = {$id}";
if($field1 != "") $whereArr[] = "field1 = {$field1}";
if($field2 != "") $whereArr[] = "field2 = {$field2}";
if($field3 != "") $whereArr[] = "field3 = {$field3}";

$whereStr = implode(" AND ", $whereArr);

$query = "Select * from assignments WHERE {$whereStr}";

这样的事情应该可以满足您的需求



 类似资料:
  • 问题内容: 我有一个html表,可将mySQL数据库表中的所有内容加载。我有与该mySQL表的列相关的下拉菜单-当用户选择下拉菜单之一时,它将使用AJAX查询数据库。 我需要弄清楚如何动态构建查询,因为有时下拉列表将为空(即,它们不想按该列进行过滤)。 做这个的最好方式是什么? 目前我有这样的事情: 您可以想象这是行不通的,因为如果这些字段中的任何一个为空,查询都会失败(或者不返回任何内容)。 显

  • 我有一个SearchActivity,它来自具有以下代码的搜索菜单项: 在上,搜索活动声明如下: 在搜索活动的< code>onCreate()和< code>onNewIntent()方法中,我处理传入的意图,但是如果我记录查询,无论我更改查询多少次,它只显示启动搜索活动的第一个查询。 我这里有什么遗漏吗?

  • 问题内容: 我在mysql上创建数据库。首先创建主体表,每个表平均有30列。日志表的标准是引用表的pk加上每列*2。像这样: 参考表: 日志表: 现在,我想要创建一个过程,在该过程中,我将表名作为参数传递,并生成表日志查询并执行它。 做这个的最好方式是什么? 问题答案: 为了使一个字符串代表一个表(或数据库)名称,您将需要用变量连接查询字符串,并在存储过程中准备/执行一条语句。这是一个基本示例。

  • 问题内容: 对于我的新项目,我想要一种现代的方法,不需要在每个数据库请求上重新加载页面。:)我希望脚本查询数据库并使用查询信息创建表。 我尝试了在互联网上找到的不同脚本。下面的一个最接近我的需求。 index.php getdata.php 但是我只得到一个表,里面有一堆{$ value}。我尝试只用$ value,但是得到了一堆零。 我尝试了一个简单的脚本 然后我得到了som结果,但是使用此脚本

  • 我在使用Python弹性搜索访问数据时遇到了一个问题。我正在得到 尝试使用时出错 我的弹性搜索版本6.5。4,python版本3.7。2.

  • 问题内容: 我正在尝试为我的网站创建一个小型搜索。我曾尝试使用全文本索引搜索,但无法使用它。这是我想出的: 因此,基本上,它搜索数据库中所有条目的所有标题,正文和标记。这工作得很好,但是我只是想知道它的效率如何?这也只适用于小型博客。无论哪种方式,我都只是想知道是否可以提高效率。 问题答案: 无法提高查询效率。一旦获得大量数据,使用通配符查询将比使用全文本索引解决方案慢数百倍或数千倍。 您应该看一