为类似的查询创建一个PHP函数,但使用不同的WHERE子句


Create single PHP Function for similar queries but with different WHERE clauses

我不确定这是否可行,也不完全确定如何搜索。我有几个动态网页,它们都链接到同一个MySQL数据库表,但得到的结果不同。例如,ID为5的动态网页将运行以下查询:

SELECT * FROM myTable WHERE category1 = 1

ID=7的网页将运行:

SELECT * FROM myTable WHERE category2 = 1

等等。所有的查询都从同一个表中获取数据,但WHERE子句对每个查询都不同——它不查看同一列。ID为7的页面应该只返回category2=1的结果,而忽略ID为5的页面将返回的结果。我的网站有大约20个不同的页面/查询,这就是为什么我想看看是否可以在函数中完成。

有没有一种方法可以将其放入函数中,如果有,我将如何正确设置参数?或者这是一个我必须在每页上单独写出所有查询的例子?

function find_results(what to put here?) {
global $connection;
$query = "SELECT * FROM myTable WHERE (how to code this part?)";    
$result = mysqli_query($connection, $query);
confirm_query ($result);
return $result;

}

您可以将必要的参数添加到函数参数列表中,然后在运行时提供值。

function find_results($column, $value) 
{
    global $connection;
    $query = "SELECT * FROM myTable WHERE {$column} = $value";    
    $result = mysqli_query($connection, $query);
    confirm_query ($result);
    return $result;
}
//Usage:
$result = find_results("category2", 1)

如果返回记录的值最终是字符串,请确保用单引号括起$value

如果pageId和categoryId之间存在常量关系,则可以创建一个数组来保存按pageId索引的数组,如:

$pageIdToCategoryMapping = [
    1 => 'cateogory1',
    2 => 'category5',
    ...
]

然后用它把数据传递给你的功能,比如

find_results($pageIdToCategoryMapping[$pageId])
function find_results($category) {
(...)
$query = "SELECT * FROM myTable WHERE ({$category} = 1)";  
(...)
}

我一直在为mysql操作使用类和对象方法。github 中可用的源代码

我建议您将数组作为参数传递,并可以按所需格式将查询或结果作为数组返回。此功能适用于任何数字或条件

<?php
$arg['db']="database";
$arg['tabe']="table";
$arg['search']['id1']="id1";
$arg['search']['id2']="id2";
//
function searchAndReturnResultAsArray($arg)
{
    $return = NULL;
    $query="SELECT * FROM ".$arg['table'];
    $flag=false;
    foreach($arg['search'] as $key=>$value)
    {
        if($flag)
            $query.=" AND ";
        else
            $flag=true;
        $query.= $key." = '".$value."' ";
    }
    $row = mysqli_num_rows($query);
    $field = mysqli_fetch_object($query);
    if($row >= 1)
    {
        while($data = mysqli_fetch_array())
        {
            $return[] = $data;
        }
    }
    return $return;
}
?>

或者,您也可以在查询准备好后返回查询。