我正在尝试为PHP创建一个mysql查询包装函数,现在我正在尝试使用预处理语句,因为它们显然是在SQL中进行MySQL查询的最佳方式,到目前为止这就是我所拥有的
public function run_query($query)
{
$arguments = $query['arguments'];
$prep = $this->connection->prepare($query['query'])
$dtString = '';
foreach($arguments as $_field => $_argument)
{
$dtString .= array_keys($_argument);
}
}
$query
的结构就像这样
$query = array( "query" => QUERY,
"arguments" => array(FIELD => array(DATATYPE => VALUE)))
以及$query
可能是什么的例子
$query = array( "query" => "SELECT * FROM table_1 WHERE active = ? AND group = ?",
"arguments" => array("active" => array("i" => 1),
"group" => array("i" => 17)))
现在你可以看到,我正在尝试做的是让我的函数允许任何查询,无论查询是什么以及你想要使用多少个参数。
现在在我的函数中,for each之后的下一步是使用$prep->bind_param($dtString, [VALUES]);
但是我读到每个值都是函数中的一个单独的参数,它有点混乱
我想知道是否有办法让我的函数bind_param
接受可变数量的参数
我目前的解决方案是创建另一个函数,将$ arguments作为参数传递给函数,将每个函数移动到新函数中,然后在创建$dtString
后计算它的大小并设置一个只有多个bind_param
但具有不同数量的参数,例如
switch($count)
{
case 1:
$prep->bind_param($dtString, $array[0]);
break;
case 2:
$prep->bind_param($dtString, $array[0], $array[1]);
break;
case 3:
$prep->bind_param($dtString, $array[0], $array[1], $array[2]);
break;
}
但我宁愿避免编写像这样的代码
答案 0 :(得分:1)
如果你只想坚持原生预备陈述,PDO是唯一的[理智]选择 不知道你的函数打算返回什么,但假设查询中的所有数据:
public function run_query($query, $params)
{
$stm = $this->connection->prepare($query)
$stm->execute($params);
return $stm->fetchAll();
}
$query = "SELECT * FROM table_1 WHERE active = ? AND group = ?";
$data = $db->run_query($query, array(1, 17));