调整选择方法以接受多个参数

Adapting a select method to accept more than one parameter

提问人:Nebojisa Nikolic 提问时间:12/11/2014 最后编辑:Félix Adriyel Gagnon-GrenierNebojisa Nikolic 更新时间:3/28/2015 访问量:124

问:

我需要实现一个可以绑定一个或多个参数的方法,以及另一个将结果返回给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;

}


}
?>
php oop mysqli

评论

0赞 cmpreshn 3/25/2015
将第二个参数“选择”作为数组会更容易吗?这样可以避免你对func_get_args的调用,我认为这会简化你的逻辑。无论如何,它可能更容易阅读。此外,至少在开始时,将“选择”拆分为两个不同的功能可能更容易。这样可以更轻松地测试您的多重选择,同时保持您的选择与单个参数不变。

答:

0赞 user4624169 3/28/2015 #1

我想你已经很接近了。

像这样的东西来代替你当前的 forach 循环怎么样:

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

}