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.