PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php-根据发布的变量构建MySQL查询大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

这似乎是一个简单的任务,但是我很难找到我喜欢的解决方案.除了笨重之外,我什么也找不到.这是我正在使用的:

一个搜索表单,该表单将变量发布到处理脚本中.这些变量是用于查询数据的筛选器.根据用户的权限,可能会有更多或更少的变量输入,具体取决于他们有权访问的过滤器.基本上,每个过滤器都引用表中来自结果的字段.每个过滤器的一个选项也是“ ANY”,因此不需要WHERE子句.

什么是构建查询字符串的好方法.假设有四个变量返回:$firstname,$lastname,$age,$dob.但是只有部分用户可以按$age和$dob进行过滤.

$query = "SELECT * FROM people";
if(($firstname != 'ANY' && !empty($firstName)) ||
   ($lastname != 'ANY' && !empty($lastName)) ||
   ($age != 'ANY' && !empty($agE)) ||
   ($dob != 'ANY' && !empty($dob))) {
    $query .= " WHERE";
}

if($firstname != 'ANY' && !empty($firstName)) {
    $query .= " firstname='$firstname'";
}
if($lastname != 'ANY' && !empty($lastName)) {
    if($firstname != 'ANY' || !empty($firstName)) {
        $query .= " AND";
    }
    $query .= " lastname='$lastname'";
}
...

等等.但这对我来说似乎是愚蠢,可怕和低效的.我使用的是经过稍微修改的MVC模式,因此在搜索模型中为每个可能的过滤器构建方法是否有意义?

解决方法:

我会为此:

$query = "SELECT * FROM people";

$whereClause = " WHERE 1 = 1 ";
if($firstname != 'ANY' && !empty($firstName)) {
    $whereClause .= " AND firstname='$firstname' ";
}
if($lastname != 'ANY' && !empty($lastName)) {
    $whereClause .= " AND lastname='$lastname' ";
}

$query .= $whereClause;

您也可以将所有语句收集到一个数组中,然后执行以下操作:

if (count($arr)>0) { 
   $query = "$query 
              WHERE ". implode(" AND ",$arr); 
}

大佬总结

以上是大佬教程为你收集整理的php-根据发布的变量构建MySQL查询全部内容,希望文章能够帮你解决php-根据发布的变量构建MySQL查询所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: