0

我正在尝试为 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 作为参数传递给函数,将我的 for each 移动到新函数中,并在创建$dtString计算它的大小并拥有一个只有多个bind_param但具有不同数量的参数的 switch case 之后这

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;
}

但我宁愿避免编写这样的代码

4

1 回答 1

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));
于 2013-04-03T05:45:04.280 回答