如何将此功能更改为其他功能。我不想使用get_result
我在网上搜索但找不到可以帮助我的答案。
public function Select($Table_Name, $Conditions='' ,$Array_Conditions_Limit=NULL , $OrderBy='', $Limit='', $Selected_Fields='*')
{
$Query = "SELECT ".$Selected_Fields." FROM ".$Table_Name;
if(!empty($Conditions))
$Query .= " WHERE ".$Conditions;
if(!empty($OrderBy))
$Query .= " ORDER BY ".$OrderBy;
if(!empty($Limit))
$Query .= " LIMIT ".$Limit;
$Statment = $this->ConnectionResult->prepare($Query);
if(isset($Array_Conditions_Limit) )
{
$Statment = $this->DynamicBindVariables($Statment, $Array_Conditions_Limit);
$Statment->execute();
return $Statment->get_result();
}
else
$Statment->execute();
return $Statment->get_result();
}
这也是动态绑定变量的函数
private function DynamicBindVariables($Statment, $Params)
{
if (is_array($Params) && $Params != NULL)
{
// Generate the Type String (eg: 'issisd')
$Types = '';
foreach($Params as $Param)
{
$Types .= $this->GetType($Param);
}
// Add the Type String as the first Parameter
$Bind_names[] = $Types;
// Loop thru the given Parameters
for ($i=0; $i<count($Params);$i++)
{
$Bind_name = 'bind' . $i;
// Add the Parameter to the variable
$$Bind_name = $Params[$i];
// Associate the Variable as an Element in the Array
$Bind_names[] = &$$Bind_name;
}
// Call the Function bind_param with dynamic Parameters
call_user_func_array(array($Statment,'bind_param'), $Bind_names);
}
elseif(isset($Params) && !empty($Params))
{
$Types = '';
$Types .= $this->GetType($Params);
$Statment->bind_param($Types ,$Params);
}
return $Statment;
}
我使用返回值如下:
$myresult =Select('post','post_category=?' ,2 );
$row = $myresul2->fetch_object()
答案 0 :(得分:1)
首先,我发现这种方法完全没用。你实际上在做什么是将精细的SQL句子分解成一些匿名的部分。
"SELECT * FROM post WHERE post_category=?"
看起来比你没有想法的匿名参数更好。
'post','post_category=?'
人们可以一眼就看出第一个声明要做什么。并且不知道第二个。更不用说它是极端的:
'post','post_category=?',NULL, NULL, 'username, password'
因此,我宁愿建议一个只接受两个参数的函数 - 一个查询本身和一个带有绑定数据的数组,而不是这个幼儿园查询构建器。
$myresult = Select("SELECT * FROM post WHERE post_category=?", [2]);
为了使它更有用,我可以使用单独的函数来获得不同的结果类型,使得fetch_object()
的第二行过时(但是,说到对象,它们完全没用来表示一个表行)。例如:
$row = $db->selectRow("SELECT * FROM post WHERE post_category=?", [2]);
看:它简洁而可读!
作为进一步的步骤,您可能希望实现更多占位符类型,以允许ORDER BY子句的字段也被参数化:
$data = $db->getAll('id','SELECT * FROM t WHERE id IN (?a) ORDER BY ?n', [1,2],'f');
中查看其工作原理以及其他功能和用例