我正在使用自己的类进行数据库查询,扩展 mysqli:
class iDatabase extends mysqli
{
public $errorMsg;
private $totalQueries;
private $stmt;
public function __construct()
{
parent::__construct( 'localhost', 'asd', 'asd', 'asd' );
if ( mysqli_connect_errno() )
{
$this->errorMsg = 'Could not connect to server.<br /><i>' . mysqli_connect_error() . '</i>.';
return;
}
parent::query( 'SET NAMES utf8' );
}
}
但是,我在执行查询和获取结果时遇到了麻烦。我正在使用准备好的语句,但值和结果的绑定(bind)方式让我感到困惑。经过一番研究后,我想出了这个接受查询和参数的函数:
public function psQuery( $query, $params )
{
$this->stmt = parent::prepare( $query );
call_user_func_array( array($this->stmt,'bind_param'), $params );
$this->stmt->execute();
}
我的问题是,从中获取结果的最佳方法是什么?我需要使用bind_result,然后获取每一行,然后关闭语句。我更愿意为每一行获取一个关联数组 - 这可能吗?
最佳答案
我在 Zend_Db_Adapter_Mysqli
和 Zend_Db_Statement_Mysqli
类上做了很多工作来让它工作,因为我们想让它符合 PDO
> 和 PDOStatement
接口(interface)。这是相当费力的,因为 MySQLi 坚持让您绑定(bind)变量来获取结果的方式令人困惑,而且 PDOStatement
支持多种获取模式。
如果你想看Zend_Db
中的代码,请特别注意函数
Zend_Db_Statement_Mysqli::_execute()
和 fetch()
。基本上,_execute()
方法使用 call_user_func_array()
绑定(bind)变量引用数组。棘手的部分是您必须初始化数组,以便 bind_result()
函数获取引用。呃,这还不太清楚,所以看看代码。
或者只使用 PDO 的 MySQL 驱动程序。这就是我站在你的立场上会做的事情。
关于php - 如何在 PHP 中抽象 mysqli 准备好的语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1387136/