我使用mysql作为我的数据库,使用php作为服务器端语言。 我们知道我们可以使用select查询从数据库中选择数据。 下面的例子很重要!!
现在,对于表的不同选择查询,我们需要不同的select方法。因为每次选择*都不好,因为它需要很长时间。
现在, 我的问题是如何编写单个表的动态单一获取方法 ,通过它我们可以实现我们的要求(如示例所示......)?
我将在函数的参数中传递参数数组..例如。在PHP
public get($arr)
{
//code goes here
}
我想获取$ arr并想要动态更改sql ..
不希望任何联接查询只是简单选择,如上所示..
答案 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
}