我正在使用自己的类进行数据库查询,扩展 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' );
}
}
但是,我在执行查询并返回结果时遇到了麻烦。我正在使用准备好的语句,但值和结果的绑定方式让我感到困惑。经过一番研究后,我想出了这个接受查询和参数的函数:
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
and Zend_Db_Statement_Mysqli
相当多的类来让它工作,因为我们想让它符合PDO
and PDOStatement
界面。这是相当费力的,因为 MySQLi 坚持让你绑定变量来获取结果的方式令人困惑,而且 MySQLi 支持的各种获取模式PDOStatement
.
如果您想查看其中的代码Zend_Db
,特别注意函数Zend_Db_Statement_Mysqli::_execute()
and fetch()
。基本上,_execute()
方法使用绑定变量引用数组call_user_func_array()
。棘手的部分是您必须初始化数组,以便bind_result()
函数获取引用。呃,这还不太清楚,所以去看一下代码。
或者只使用 PDO 的 MySQL 驱动程序。这就是我站在你的立场上会做的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)