gpt4 book ai didi

php - 如何在 PHP 中抽象 mysqli 准备好的语句?

转载 作者:行者123 更新时间:2023-11-29 01:34:17 25 4
gpt4 key购买 nike

我正在使用自己的类进行数据库查询,扩展 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_MysqliZend_Db_Statement_Mysqli 类上做了很多工作来让它工作,因为我们想让它符合 PDOPDOStatement 接口(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com