2014-12-11 3 views
4

Мне нужно реализовать метод select(), который может связывать один или несколько параметров и другой метод, который возвращает результат в index.php.Адаптация метода select для принятия более одного параметра

Желаемая код вызывается из index.php:

echo $this->_results -> korisnik_id; 

это класс базы данных, которые необходимо реализовать select(). настоящее Select() функция принимает один параметр ...

DB::getInstance() -> Select('SELECT korisnik_id FROM korisnici WHERE korisnik_ime= ?', 's', 'Alex'); 

... но не более:

DB::getInstance() -> Select('SELECT korisnik_id FROM korisnici WHERE korisnik_ime= ? AND korisnik_grupa= ?','si', 'Alex', '1'); 

полный класс:

<?php 
class DB{ 
    private static $_instance = null; 
    private $_stmt,$_query,$_error=false,$_results,$count=0; 

    public function __construct() { 
     try{ 

      $this-> _stmt = new mysqli(Config::get('mysql/host'),Config::get('mysql/username'),Config::get('mysql/password'),Config::get('mysql/db')); 
      if (mysqli_connect_errno()) { 
        printf("Connect failed: %s\n", mysqli_connect_error()); 
        exit(); 
      } 

     } catch (Exception $ex) { 

     } 

    } 

    public static function getInstance(){ 

     if(!isset(self::$_instance)){ 
      self::$_instance = new DB(); 
     } 
     return self::$_instance; 
    } 


    public function Select($query, $paramString = ''){ 
    $stmt = $this->_stmt->prepare($query); 

    if (func_num_args() > 2){ 
     $parameters = func_get_args(); 

     array_shift($parameters); // remove the query from the list 
     // Array needs to be bound by reference 

     foreach ($parameters as $key=>&$value) { 
      $parameters[$key] = &$value; 

     } 
     call_user_func_array(array($stmt, "bind_param"), $parameters); 
    } 
    $stmt->execute(); 
    $this->_results = $stmt->get_result(); 
    $stmt->close(); 

    $this->_results = $this->_results -> fetch_object(); 
    echo $this->_results -> korisnik_id; 

} 


} 
?> 
+0

было бы легче иметь свой 2-й аргумент «Select» как массив? Это позволит избежать вашего вызова func_get_args, и я думаю, что это упростит вашу логику. В любом случае это может быть легче читать. Кроме того, может быть проще разделить «Выбор» на две разные функции, по крайней мере, для начала. Это упростит проверку вашего множественного выбора, сохраняя при этом ваш выбор с единственным параметром. – cmpreshn

ответ

0

Я думаю, что вы очень близки.

Как о чем-то вроде этого в месте текущего цикла forach:

foreach ($parameters as $key=>&$value) { 
      $this->_stmt->bindParam ($key, $value, PDO::PARAM_STR); 

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