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

标签 php mysql prepared-statement

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

相关文章:

python - SQL 计数优化

mysql - 如何在 laravel DB :raw 中使用 count() WHERE IN

php - 将变量设置为 sql 查询的字段名称

php - Laravel 5 在 POST 状态 302 找到

php - 修改 View 而不删除基础表

mysql - 为什么这个工作优先级 = '' -1 在 Mysql 中

c++ - 如何编写sql语句和绑定(bind)参数?

php - 为什么 affected_rows 总是返回 -1?

java - 当我第一次按下将我连接到 SQL Server 2012 数据库并执行特定查询的 JFXButton 时,为什么会出现延迟?

SQL查询后PHP var_dump NULL错误