我正在使用自己的类进行数据库查询,扩展了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,然后获取每一行,然后关闭语句。我更愿意为每一行获得一个关联数组 - 这可能吗?
答案 0 :(得分:4)
由于我们希望使其符合Zend_Db_Adapter_Mysqli
和Zend_Db_Statement_Mysqli
接口,因此我在PDO
和PDOStatement
类上工作了很多工作。这非常费力,因为MySQLi坚持让你绑定变量以获得结果的混乱方式,以及PDOStatement
支持的各种获取模式。
如果您想查看Zend_Db
中的代码,请特别注意这些功能
Zend_Db_Statement_Mysqli::_execute()
和fetch()
。基本上,_execute()
方法使用call_user_func_array()
绑定变量引用数组。棘手的部分是你必须初始化数组,以便bind_result()
函数获取引用。呃,那不是很清楚,所以去看看代码。
或者只是使用PDO的MySQL驱动程序。这就是我要穿的鞋子。
答案 1 :(得分:1)
我会看看Zend_Db的实施情况,特别是mysqli adapter,看看他们是如何做的。
答案 2 :(得分:0)
看来你必须做你所说的“我需要使用bind_result,然后获取每一行,然后关闭语句”
我认为没有更简单的方法。