PHP MySQL GET 代码审查

标签 php mysql performance oop get

我认为这是一个非常简单的问题。这是我最好的选择还是有“正确”的方法来做到这一点?

<?php  
    $correctOrder = array("name", "address", "phone", "starttime", "endtime", 
                    "status", "details");  

    $sql->sql1 = "SELECT * FROM `pickups` WHERE";  

    if (isset($_GET["name"])){  
        $sql->sql2 = "`name` LIKE '%" . $_GET['name'] . "%'";  
        }  
    if (isset($_GET["address"])){  
        if (!isset($_GET['name'])){
            $q = "`address` LIKE '%" . $_GET['address'] . "%'";  
        } else {  
            $q = "AND `address` LIKE '%" . $_GET['address'] . "%'";  
            }
        $sql->sql3 = $q;
        }
    ...
    ...

    echo implode(" ", (array) $sql);  
?>  

所以,现在:

?name=Jari%20Martikainen&address=some%20random%20street

?name=Jari%20Martikainen&address=some%20random%20street&blah=har

?address=some%20random%20street&blah=har&name=Jari%20Martikainen

都返回所需的相同结果,但这似乎不是一种非常有效的做事方式。

最佳答案

构建 AND 子句的数组 ($ands),但没有“AND”。

$ands = array();
if (...)
    $ands[] = "name LIKE ...";
if (...)
    $ands[] = "address LIKE ...";
...

然后构建查询:

$query = "SELECT ... WHERE " . implode(' AND ', $ands);

我发现这种模式简单、干净,并且避免了诸如 1=1 之类的困惑或删除了额外的 AND

关于PHP MySQL GET 代码审查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48238201/

相关文章:

sql - MySQL - 通过索引防止表中的重复记录?

Mysql "Using temporary"但此查询中没有匹配的官方原因

php - 如何使用 PHP 获取列中的所有值?

c# - 使用 http 远程 C# 时吞吐量低

java - 编程语言中的堆栈性能

php - 十二要素应用程序声明如何应用于PHP项目?

php - 简化php代码按列和排序结果从mysql数据库中选择数据

php - 重构具有多个返回的 IF 语句

php - SoapServer - 需要在 Soap 响应中添加命名空间

css - 这些 CSS 片段中的哪一个更有效地实现了预期的结果?