MySQLi查询无法正常工作

时间:2011-11-01 20:50:00

标签: php mysqli

当我使用自定义函数执行MySQLi查询时,我收到此错误...

Fatal error: Call to a member function execute() on a non-object in /Applications/MAMP/htdocs/RevFramework/Application/Model/Engine/eMySQLi.php on line 92

我真的不知道出了什么问题......那就是我将$ types和$ params设置为null,否则我确信call_user_func_array也会抛出错误。

public function query($SQL, $types = null, $params = null)
    {
            $this->result = $this->db->prepare($SQL);
        
            if(isset($types) && isset($params))
            {
                $bind_names[] = $types;
                
                for ($i = 0; $i < count($params); $i++) 
                {
                    $bind_name = 'bind' . $i;
                    $$bind_name = $params[$i];
                    $bind_names[] = &$$bind_name;
                }
            
                call_user_func_array(array($this->result, 'bind_param'), $bind_names);
            }

            $this->result->execute();
    }

它正在进行的查询:

$class->query("SELECT name FROM rev_widgets ORDER BY order");

我完全不知道会出现什么问题。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我找到了答案!好吧,我只是继续前进,做得非常不同。

对于每个需要它的人来说,现在看起来都像这样。

class Core_Model extends Core_Controller
{

        private $connected;

        private $db;

        protected $result;

    public function __construct()
    {   
            //$this->connect();
    }

        protected function connect()
        {
            if($this->connected != true)
            {
                $this->db = new mysqli($this->data['host'], $this->data['user'], $this->data['pass'], $this->data['database']);

                if($this->mysqli->connect_errno)    
                {
                    $this->error($mysqli->connect_errno);
                }

                $this->connected = true;
            }
        } 

        protected function disconnect()
        {
            if($this->connected == true)
            {
                $this->db->close();
                $this->connected = false;
            }
        }

        public function newQuery()
        {
            $this->connect();

            if(is_object($this->result))
            {
                $this->result->close();
            }

            return $this;
        }

        public function query($SQL, $params = null) 
        {   
            $this->newQuery();

            if(($this->result = $this->db->prepare($SQL)))
            {
                if($params != null) 
                {
                    call_user_func_array(array($this->result, 'bind_param'), $this->refreshParams($params));
                }

                $this->result->execute();
            }
            else
            {
                trigger_error("MySQLi query <i> '" . $SQL . "'</i> failed", E_USER_ERROR);
            }

            return $this;
        }

        public function get() 
        {
            $parameters = $this->getFieldNames();
            call_user_func_array(array($this->result, 'bind_result'), $this->refreshParams($parameters));  

            while($this->result->fetch()) 
            {  
                $x = array();  

                foreach($this->row as $key => $val) 
                {  
                    $x[$key] = $val;  
                }  

                $data[] = $x;
            }

            return $data;
        }

        public function id() 
        {
            return $this->mysql->insert_id;
        }

        public function num_rows() 
        {
            $this->result->store_result();

            return $this->result->num_rows;
        }


    private function getFieldNames() 
    {
            $meta = $this->result->result_metadata(); 

            while($field = $meta->fetch_field()) 
            {

                $parameters[] = &$this->row[$field->name];

            }

            return $parameters;
        }

        private function refreshParams($params) 
        {
            $temp = array();

            foreach($params as $key => $value) 
            {
                $temp[$key] = &$params[$key];
            }

            return $temp;
        }
}

希望这有助于某人!