在mysql中动态选择查询?

时间:2016-06-28 04:06:59

标签: php mysql mysqli

我使用mysql作为我的数据库,使用php作为服务器端语言。 我们知道我们可以使用select查询从数据库中选择数据。  下面的例子很重要!!

  1. 从表中选择*
  2. 从表中选择名称
  3. 从工资表>中选择姓名,工资10000 等..........
  4. 现在,对于表的不同选择查询,我们需要不同的select方法。因为每次选择*都不好,因为它需要很长时间。

    现在, 我的问题是如何编写单个表的动态单一获取方法 ,通过它我们可以实现我们的要求(如示例所示......)?

    我将在函数的参数中传递参数数组..例如。在PHP

    public get($arr)
    {
      //code goes here
    }
    

    我想获取$ arr并想要动态更改sql ..

    不希望任何联接查询只是简单选择,如上所示..

3 个答案:

答案 0 :(得分:3)

根据您的想法,您可以执行以下操作:

public get($arrfield, $arrtable, $arrwhere)
{
    $str = "SELECT " . $arrfield . " FROM " . $arrtable . " WHERE " . $arrwhere;

    return $str;

   // You can return the query string or run the query and return the results
} 

答案 1 :(得分:3)

相信我,写下所有三个查询并不是难以完成必须不惜一切代价避免的工作。

请不要将一种珍贵的SQL语言混淆成难以理解的乱码。更不用说无数安全漏洞了你的方法。

你应该想到的是一个让你使用参数的功能。因此,更好地使我们的功能像这样

function mysqli($mysqli, $query, $params, $types = NULL)
{
    $statement = $mysqli->prepare($select);
    $types = $types ?: str_repeat('s', count($params));
    $statement->bind_param($types, ...$params);
    $statement->execute();
    return $statement;
}

并按原样运行您的每个查询,仅提供占位符而不是变量

  • select * from table
    你将永远不需要像这样的查询
  • select name from table

    $names = mysqli($db, "select name from table")->get_result->fetch_all();
    
  • `从表中选择姓名,薪水:

    $stmt = mysqli($db, "select name from table where salary > ?", [10000]);
    $names = $stmt->get_result->fetch_all();
    

请参阅 - 查询本身是代码最少的部分。您的关注点应该不是SQL,而是用于运行查询和获取数据的无用的PHP代码重复部分。

答案 2 :(得分:0)

以下是动态查询的结构。请添加必需的验证。您可以添加'或者'也可以在参数或数据类型的基础上完成。喜欢

public SelectTable($arrfield, $table, $arrwhere, $arrgroup)
{
    if(!empty($arrfield))
    {
     $fields = implode('`,`',$arrfield);
    }
    else
    {
       $fields = '*';
    }

    if(!empty($arrwhere))
    {
        foreach($arrwhere as $fieldName=>$fieldValue)
        {
            if(is_array($fieldValue))
            {
                 $cond .= "`fieldName` in (". implode(',',$fieldValue) );
            }
            else
               $cond .= "`fieldName` = '" . addslashes($fieldValue)."'";
        }
    }
    else
    {
        $cond = '1';
    }
    if(!empty($arrgroup))
    { 
        $groupBy .= " group by ";
        foreach($arrgroup as $field=>$value)
        {
           $groupBy .= $field . " " . $vale;
        } 
    }
}
 $str = "SELECT " . $fields . " FROM " . $table . " WHERE " . $cond . $groupBy;

    return $str;

   // You can return the query string or run the query and return the results
} 
相关问题