当我使用自定义函数执行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");
我完全不知道会出现什么问题。
感谢任何帮助!
答案 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;
}
}
希望这有助于某人!