简体   繁体   中英

MySQLi query not working properly

When I execute a MySQLi query with my custom function I get this error...

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

I really don't know what's wrong... That is if I set $types and $params to null, else I'm sure call_user_func_array would also throw an error.

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();
    }

The query it is doing:

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

I have absolutely no idea what could be wrong.

Any help is appreciated!

I found the answer! Well, I just went ahead and did it very differently.

For everyone who needs it, it all looks like this now.

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;
        }
}

Hope this helps someone!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM