2013-04-03 197 views
0

我想为PHP做一个mysql查询包装函数,现在我正在尝试使用预准备语句,因为它们显然是最好的方法在SQL查询的MySQL,到目前为止,这是我所有没有办法让bind_param接受可变数量的参数

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))) 

现在你可以看到,我正在试图做的是让我的函数允许任何查询,而不管查询是什么以及要使用多少个参数。

现在

在我的功能,以后每个接下来的步骤是使用$prep->bind_param($dtString, [VALUES]);但是我读了每个值就是有点弄乱的东西了

我不知道是否有一个功能的单独的参数办法让bind_param在我的函数接受可变数量的参数

我目前的解决方案是创建另一个函数,在传递$参数作为参数传递给函数,将我的每一个到新的功能和创建$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

不,你不能避免那个烂摊子。不要忘记,您也将获得类似的娱乐获取查询结果。所以,最好转到PDO,直到太迟 –

+0

@YourCommonSense是否有任何缺点使用PDO在MySQLi上准备好的语句? –

+1

当然可以。如果你更喜欢冗长,复杂和臃肿的代码,转向PDO将是一个痛苦。 –

回答

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)); 
相关问题