在mysql中使用php数组进行查询

时间:2012-09-26 10:09:20

标签: php mysql arrays

我想用多个过滤器获取内容,现在只有一个过滤器。 例如:

  

SELECT * FROM Table1 WHERE status = true AND category ='Camera'AND   model ='三星'AND type ='新'

我想为它创建一个数组。但是因为我是一个没有领先的新手。

function getAllRequests($filter){
if(empty($filter)){
    $addfilter = '';    
    }else{
    $addfilter = 'AND cat_id=' . $filter;
    }
}

$sql = 'SELECT * FROM Table1 WHERE status=true' . $filter;

任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:1)

这将使您更接近解决方案,虽然它不会替换查询中的cat_id,这肯定是错误的 - 但如果没有数组结构则不可能做得太多:

function getAllRequests($filter)
{
    $addfilter="";
    if(!empty($filter))
    {
        foreach($filter as $val)
        {
            $addfilter. = ' AND cat_id=' . $val .'\'';
        }
    }
    return $addFilter;
}

$myFilters=getAllRequests($filter);
$sql = 'SELECT * FROM Table1 WHERE status=true' . $myFilters;

另一方面,如果您的阵列是以这样的方式构建的:

array{ category => camera, model => samsung); // etc

您可以使用以下内容:

function getAllRequests($filter)
{
    $addfilter="";
    if(!empty($filter))
    {
        foreach($filter as $key => $val)
        {
            $addfilter. = " AND `$key` = '$val'";
        }
    }
    return $addFilter;
}

$myFilters=getAllRequests($filter);
$sql = 'SELECT * FROM Table1 WHERE status=true' . $myFilters;

编辑:您可以按以下方式遍历所有过滤器:

function getAllRequests()
{
    $addfilter="";
    if(!empty($_REQUEST))
    {
    foreach($_REQUEST as $key => $val)
    {
        $addfilter. = " AND `$key` = '$val'";
    }
    }
    return $addFilter;
}

$myFilters=getAllRequests();
$sql = 'SELECT * FROM Table1 WHERE status=true' . $myFilters;

您不需要传递$_REQUEST(这将适用于GET和POST),因为它已经是超级全局。

答案 1 :(得分:1)

function getAllRequests($filter){
if(empty($filter)){
$addfilter = '';    
}else{
$addfilter = 'AND cat_id=' . $filter;
 }
}

$ sql ='SELECT * FROM Table1 WHERE status = true'。 $ addfilter;

答案 2 :(得分:0)

您可以使用另一种方法,即使用可选参数,它会使您的WHERE子句动态化。在这种方法中,您将所有参数的值直接传递给sql查询,该查询应如下所示:

SELECT * 
FROM Table1 
WHERE 1 = 1
  AND (@status   IS NULL OR status   = @statusParam)
  AND (@category IS NULL OR category = @categoryParam)
  AND (@model    IS NULL OR model    = @modelParam)
  AND (@type     IS NULL OR type     = @typeParam)

然后,如果将任何参数@statusParam@categoryParam@modelParam@typeParam传递给具有NULL值的查询,则与列进行比较持有这个价值将被忽略。我使用了谓词1 = 1,以防所有NULL子句中传递给所有WHERE值的查询的所有值都将被忽略,因为它不会显示,因为{ {1}}始终为真,它就像WHERE 1 = 1

答案 3 :(得分:0)

使用此

function getAllRequests($filter){
    if(empty($filter)){
      $addfilter = '';    
     }else{
      $addfilter .= 'AND cat_id=' . $filter;
    }
  return $addfilter;
}

$sql = 'SELECT * FROM Table1 WHERE status=true' . getAllRequests($filter);

答案 4 :(得分:0)

当你发送数组时,确保它有索引

 $conditions = array('category' => 'Camera', 'model' => 'Samsung' , 'type' => 'New')

现在循环播放它。在你的其他条件

foreach($conditions as $key =>$value){

    $addfilter .= 'AND ' . $key . ' = ' . $value;

}