2013-09-12 4 views
0

Я пишу класс базы данных OOP для mysqli. Я хочу, чтобы все запросы были подготовлены, но у меня возникают трудности с привязкой параметров к запросам динамически. Я хочу, чтобы метод запроса API, чтобы выглядеть следующим образомПравильный способ динамического связывания параметров в MYSQLI

query($sql, $param) 

Однако, я не знаю, как связать параметры динамически в методе. Я искал примеры в PHP руководстве и увидел коды, подобные этим:

$method = new ReflectionMethod('mysqli_stmt', 'bind_param'); 
$method->invokeArgs($stmt, $params);  
$stmt->execute(); 

Я знаю, что ReflectionMethod() выполнит метод для объекта или класса, но я не понимаю, как это работает в этом случае, учитывая, что каждый параметр имеет значение type, которое должно указываться в то время как binding.

Как я могу связать параметры динамически?

Во-вторых, как ReflectionMethod() работать в этой ситуации?

+0

Почему бы не просто использовать PDO? http://php.net/manual/en/book.pdo.php. Он делает то, что вы пытаетесь сделать. – Rottingham

+0

Здесь [довольно канонический ответ] (http://stackoverflow.com/a/17874410/285587) –

ответ

0

Я всегда пользовался этой пользовательской функцией, которую я написал для работы с mysqli, и она работает для меня.

public function execute_prepared_query_reflection ($array_list) 
    { 
     $ret_stmt = mysqli_prepare($this->conn, $this->sql);  
     //call_user_func_array('mysqli_stmt_bind_param', array_merge (array($this->statement, $param_listtypes), $param_list)); 
     //$this->statement->bind_param("issdssssss", $param_staffid, $param_duration, $param_dateappraised, $param_totalmark, $param_detailBySuperv, $param_sumByHead, $param_recommendation, $param_enteredby); 
     if ($ret_stmt!=false) 
     { 
      $method = new ReflectionMethod('mysqli_stmt', 'bind_param'); 
      $method->invokeArgs($ret_stmt, $this->createArrayRef($array_list));    
      $retvar = $ret_stmt->execute(); 
     } 
     $method = null; 
     $ret_stmt = null; 

    } 
Смежные вопросы