根据输入调整函数中的sql语句

2024-03-03

这事有点紧急啊!

我正在尝试进行一个简单的过滤器搜索,您可以从一系列 3 个下拉列表中进行选择,然后基于此显示结果,我将如何调整每个下拉列表的 sql 查询,如果您要只选择从 3 个中的一个搜索,而不是从全部 3 个中搜索,等等... 例如,可能存在带有输入的 url,例如:url.com?location=gb&color=3&hair=4并且仍然形成正确的 sql 查询,如下所示:url.com?location=gb&hair=1并且不会遇到 WHERE 和 AND 等以及语句中的空变量的问题

这是否不需要一个庞大的函数来检查使用 if 来查看如何为所有可能性设置数据?

谢谢, 斯特凡


我前几天回答过一个问题,我觉得和你的很相似:

PHP:准备好的语句,IF 语句需要帮助 https://stackoverflow.com/questions/2732734/php-prepared-statement-if-statement-help-needed/2732757#2732757

这个想法是,您在代码中使用条件逻辑来根据需要收集与应用程序输入相对应的术语。然后以产生正确 SQL 表达式的方式将它们连接在一起。

它确实需要一些应用程序函数来动态构建 SQL 表达式,并且有一些技术可以使其尽可能简洁。如果您确实有许多可能的搜索词,则最终可能会得到一个冗长的函数。但猜猜怎么了?如果您有复杂的输入,那么需要复杂的代码来处理它们也就不足为奇了。


回复您的评论:

url.com?location=gb&color=3&hair=4

好的,您最多有三个输入,并且必须根据这些输入动态构建 SQL 查询。让我们从最后开始并倒推。最终你想要一个像这样的 SQL 表达式:

WHERE (location = 'gb') AND (color = 3) AND (hair = 4)

如果您有一个包含三个术语的数组,您可以使用 PHP 将它们连接在一起implode() http://php.net/implode功能。但您的数量也可能少于三个。您可以通过将任意数量的项放入数组中并将它们内爆来处理任意数量的项AND每个术语之间:

$where_array = array(
        "(location = 'gb')",
        "(color = 3)",
        "(hair = 4)"
    );

$where_expr = "WHERE " . implode(" AND ", $where_array);

那么如何使用这些术语创建数组呢?通过编写代码,为应用程序当前请求中存在的每个输入有条件地附加到数组:

$where_array = array();
if (array_key_exists("location", $_GET)) {
    $location = mysql_real_escape_string($_GET["location"]);
    $where_array[] = "(location = '$location')";
}
if (array_key_exists("color", $_GET)) {
    $color = mysql_real_escape_string($_GET["color"]);
    $where_array[] = "(color = '$color')";
}
if (array_key_exists("hair" $_GET)) {
    $hair = mysql_real_escape_string($_GET["hair"]);
    $where_array[] = "(hair = '$hair')";
}

完成所有操作后,您的数组将包含零到三个元素。如果有一个或多个,你想生成一个WHERE子句如前所示,否则跳过它。

$where_expr = '';
if ($where_array) {
    $where_expr = "WHERE " . implode(" AND ", $where_array);
}

然后附加$where_expr到您的基线 SQL 查询。

$sql .= $where_expr

关于的东西$params用于查询参数,这是将动态值包含到 SQL 表达式中的另一种方法,而不是mysql_real_escape_string()。这不是强制性的(事实上 PHP 的旧 mysql 扩展不支持查询参数),但我建议切换到 PDO,以便您可以使用此功能。请参阅此处的示例:PDO::prepare() http://php.net/manual/en/pdo.prepare.php.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据输入调整函数中的sql语句 的相关文章

  • SQL where 连接集必须包含所有值,但可以包含更多值

    我有三张桌子offers sports和连接表offers sports class Offer lt ActiveRecord Base has and belongs to many sports end class Sport lt
  • 无法更改 MS Access 2007 上的数据类型

    我有一个巨大的数据库 800MB 其中包含一个名为 上次修改日期 的字段 目前该字段作为文本数据类型输入 但需要将其更改为日期 时间字段以执行一些查询 我有另一个完全相同的数据库 但其中只有 35MB 的数据 当我更改数据类型时 它工作正常
  • OOP 中的静态和动态变量/方法是什么?

    我试图更好地理解 OOP 中的基本概念 面向对象编程中的静态和动态变量和方法是什么 例如 使用 this 与使用双冒号 之间有什么区别 this this gt a method 优点 缺点 这个 不是自我记录的 如下所示 this gt
  • 使用 PHP DOMDocument 更改标签属性值

    我想用 PHP DOMDocument 更改标签属性的值 例如 假设我们有这行 HTML a href http foo bar Click here a 我将上面的代码加载到 PHP 中 如下所示 dom new domDocument
  • 如何启用 php curl 以在 php cli 中使用

    我已经在没有服务器的情况下在我的计算机上安装了 php 并使用 cli 运行它 但未启用 php curl 我不知道如何执行此操作 如果有人遇到此线程并使用 wamp 服务器 这里有一个针对上述问题的快速解决方案http forum wam
  • 查询从 Teradata 时间戳返回特定日期(6)

    我如何从 teradata timestamp 6 字段中搜索特定日期 例如 2013 10 22 sel from table A where date 2013 10 22 我尝试了上面的查询 该查询抛出错误 请帮忙 你可以这样尝试 s
  • Zend 框架 PDF 问题

    又是我 伙计们 我有一个小问题 Create new PDF pdf new Zend Pdf Add new page to the document page pdf gt newPage Zend Pdf Page SIZE A4 p
  • 捕获动态表中 HTML 元素的值

    我有从数据库生成的以下动态表
  • iPhone表情插入MySQL却变成空值

    我们正在开发一个 iPhone 应用程序 它将表情符号从 iPhone 发送到服务器端 PHP 并插入到 MySQL 表中 我正在做服务器端的工作 但是insert语句执行成功后 插入的值变成空了 我可以正确插入字段 varchar 的是文
  • C 中的三元搜索

    我想在 C 中对整数进行三元搜索 我已经尝试过 但它对于特定情况效果不佳 请帮我删除以下程序中的错误 我的尝试 include
  • ORDER BY id 或 date_created 显示最新结果?

    我有一个表 实际上有几个 我想首先从中获取最新条目的结果 这是我的ORDER BY条款选项 date created INT 从不改变值 id 当然是INT AUTO INCRMENT 两列应同等地代表记录插入的顺序 我自然会使用date
  • PHP 版本如何匹配“API=yyyymmdd”签名/标签?

    是否有明确且可靠的来源来找出哪个 PHP 发行版本 x y z 携带 使用哪个 API yyyymmdd 签名 标签 PHP 的版本控制存储库是 PHP 版本与其 API 日期版本之间相关性的权威来源 请记住 仅主要版本PHP 的版本 例如
  • 有没有办法获取 PHP 中可用区域设置的列表?

    在Java中 你可以调用Locale getAvailableLocales 获取可用区域设置的列表 我期待 PHP 的同等功能Locale http php net manual en class locale php类 但找不到 有没有
  • PHP 对象创建和内存使用

    一个基本的虚拟类 class foo var bar 0 function foo function boo echo memory get usage echo n foo new foo echo memory get usage ec
  • 下载表格 - 选择文件合并到 Zip 中

    我希望创建一个表单 用户可以从手册列表中进行选择 总共10个 他们可能只想下载 3 份小册子 或 6 份 或 1 份 或 9 份小册子 但想法是他们选择所需的小册子 然后用脚本组合一个包含所需小册子的 zip 文件 任何人都可以提出任何建议
  • PHP 中的数据清理[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 优化mysql中日期类型字段的查询

    我目前准备了以下查询 select sum amount as total from incomes where YEAR date 2019 and MONTH date 07 and incomes deleted at is null
  • 未加载 Firebird 扩展

    我正在尝试在 PHP 中使用 Firebird 扩展 我有扩展文件 php pdo firebird dll php interbase dll in my ext文件夹 我将它们添加到我的php ini像这样文件 PHP PDO FIRE
  • 升级到 5.4 但“php -v”仍然返回旧版本

    我使用的是 OSX Lion 10 7 5 正如建议的如何在 Mac OS X 中升级 PHP https stackoverflow com questions 2526085 how do i upgrade php in mac os
  • 扁平化/反规范化 SQL 查找表的最佳方法?

    我有很多这样的表 Lookup HealthCheckupRisks ID Name 1 Anemia 2 Anorexic 3 Bulemic 4 Depression 122 Syphilis PatientRisksOnCheckup

随机推荐

  • .NET Framework 相当于 IApplicationBuilder.UseForwardedHeaders()

    我正在使用在 NET Framework 4 7 2 上运行的 ASP NET WebForms 应用程序 该应用程序位于 Azure 应用程序网关后面 网关执行 SSL 切换 因此添加X Forwarded Proto https hea
  • JavaScript Canvas - 平滑改变rgb

    我正在尝试将矩形的颜色从 黄色 更改为 蓝色 我用它fillStyle与RGB var canvas document getElementById mycanvas ctx document getElementById mycanvas
  • React Hooks:为什么将设置状态函数传递给子组件是不好的做法?

    我有一个问题需要提高我对反应钩子的理解 据说 如果一个人传递了设定的状态函数或挂钩到孩子 这是一种不好的做法 因此 应该将一个处理函数传递给位于父级中的子级 然后使用其中的设置状态函数 当我在开发应用程序的许多工作部分后遇到这个问题时 我想
  • 将命名参数与 PDO 一起用于 LIKE

    我正在尝试搜索name我的数据库中的字段使用LIKE 如果我像这样 手工 编写 SQL query SELECT n FROM help article n WHERE name LIKE how n sql db gt prepare q
  • 正则表达式 C# - 是否可以在匹配时提取匹配项?

    假设我有一个字符串 需要验证其格式是否正确 例如RR1234566 001 2 个字母 7 个数字 破折号 1 个或多个数字 我用类似的东西 Regex regex new Regex patternString if regex IsMa
  • 在查看器窗格中打开 R Markdown

    我正在使用 rmarkdown 包的渲染函数渲染带有参数的 R Markdown rmarkdown render file Rmd params ask 它会打开我的默认浏览器 Chrome 要求输入参数 我希望它不是在默认浏览器中打开
  • 如何覆盖材质 CSS 样式?

    我使用角度材质 2 Material CSS 中有一种 CSS 样式 mat radio button mat accent mat radio inner circle background color fff 我尝试在自定义 CSS 文
  • 使用 Laravel 的 Azure Active Directory SSO

    我正在使用 azure Active Directory 进行 sso 我已经在 azure 上完成了设置并开始操作 我正在使用计量学 laravel azure ad oauth https packagist org packages
  • R 中“data.frame 的标准公式接口”是什么意思?

    的文档aggregate states aggregate formula 是 aggregate data frame 的标准公式接口 我是R新手 不明白这是什么意思 请解释 Thanks Uri 跳转到示例部分的中间help aggre
  • php 自动化 setter 和 getter

    我正在尝试为 php 对象实现一些自动 getter 和 setter 我的目标是自动为每个属性提供方法getProperty and setProperty value 这样 如果没有为属性实现该方法 脚本将简单地设置或获取该值 举个例子
  • 如何在 PHP 中循环遍历已从 JSON 解码的对象数组,并回显值

    我是 PHP 新手 不知道如何继续 我从解码 JSOn 中返回的数组是 抱歉 如果其格式很奇怪 array 3 0 gt array 4 Name gt string 22 Brent s Medical Center date gt st
  • 基类和派生类中的同名对象不会被标记为错误

    class Base public type1 m Pants class Derived Base public type2 m Pants 这本质上并没有被标记为错误 而是在整个项目中造成了各种破坏和问题 有谁知道不会标记这一点的技术细
  • Struts 2.3 - 重定向与redirectAction

    之间的主要区别是什么redirect and redirectAction在Struts2 3上下文中 我看过以下网址redirect http struts apache org release 2 0 x docs redirect r
  • JavaScript 函数上下文不正确

    我注意到 javascript 中有一个奇怪的事情 考虑以下几点 var fn toUpperCase call console log typeof fn function fn Uncaught TypeError fn is not
  • 在相机预览上叠加静态可绘制图像

    我需要在手机处于相机预览模式时显示静态 png 图像 目前我正在引用此链接 a link 将图像叠加到相机预览 SurfaceView 上 https stackoverflow com questions 3548666 overlay
  • Angular $compile 与所需的控制器

    我有一个复合列表指令 即 一个列表项 它本身可以是一个列表 父指令定义控制器 directive parent function controller function scope link function scope element a
  • 如何像 pdf 文件一样下载 jpg 图像?

    我请求以与 pdf 文件相同的方式下载 jpg 图像 目前 如果我将 jpg 图像作为链接添加到网页 它将在另一个浏览器窗口中打开 而不是实际下载到用户计算机 但是 pdf 文件可以 这是标准代码 a href images my imag
  • 为什么 QGridLayout 小部件在添加新小部件时会移动?

    我似乎无法理解它们是如何工作的 放置多个小部件的最佳方式似乎是 QGridLayout 但是当我将某些内容添加到特定的行 列中 然后决定将某些内容添加到另一行 列中时 一切都会发生变化 这真的很令人沮丧 例如 我什至无法做像谷歌主页这样简单
  • 生成遵循分布的平滑随机数

    我有两个变量 我们称它们为x and y 绘制时是图中分散的蓝点 我已经使用 Scipy 中的 curve fit 拟合了它们 我想生成 假设 500000 平滑 复制分布的随机数 然后x and y By 平滑 我的意思是 我不想要完全复
  • 根据输入调整函数中的sql语句

    这事有点紧急啊 我正在尝试进行一个简单的过滤器搜索 您可以从一系列 3 个下拉列表中进行选择 然后基于此显示结果 我将如何调整每个下拉列表的 sql 查询 如果您要只选择从 3 个中的一个搜索 而不是从全部 3 个中搜索 等等 例如 可能存