为类似的查询创建单个PHP函数,但具有不同的WHERE子句

时间:2014-10-09 13:25:46

标签: php mysql

我不确定这是否可行,我不完全确定如何搜索。我有几个动态网页都链接到相同的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;

}

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

如果它是pageId和categoryId之间的常量关系,你可以创建一个数组来保存它由pageId索引,如:

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

然后只需使用它将数据传递给您的函数,如

find_results($pageIdToCategoryMapping[$pageId])

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

}

答案 2 :(得分:0)

我一直在使用类和对象方法进行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;
}
?>

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