php - Mysqli 抽象,从准备好的语句中获取数组

标签 php mysqli abstraction

最近我在一个曾经工作得很好的库中偶然发现了一个错误,如果我能找出它在哪里,我就该死了。

代码示例如下,我对其中的调试内容表示歉意,但我正在努力让它工作。

问题是 $temp 是一个具有正确键(列名)的数组,但所有值都是 NULL。

我认为问题出在

call_user_func_array(array($query, 'bind_result'), $params);

有点,但我无法真正理解它。

public function fetchRows(){
    error_reporting(E_ALL+E_NOTICE);
    $args = func_get_args();
    $sql = array_shift($args);
    traceVar($sql, "Query");
    $colTypes = array_shift($args);
    if (!$query = $this->prepare($sql, $colTypes)) {
        die('Please check your sql statement : unable to prepare');
    }
    if (count($args)){
        traceVar($args,'Binding params with');
        call_user_func_array(array($query,'bindParam'), $args);
    }

    $query->execute();

    $meta = $query->result_metadata();
    while ($field = $meta->fetch_field()) {
        $params[] = &$row[$field->name];
    }
    traceVar($params,'Binding results with');
    call_user_func_array(array($query, 'bind_result'), $params);

    while ($query->fetch()) {
        traceVar($row,'After fetch');
        $temp = array();
        foreach($row as $key => $val) {
            $temp[$key] = $val;
        } 
        $result[] = $temp;
    }

    $meta->free();
    $query->close(); 
    //self::close_db_conn(); 
    return $result;
}

最佳答案

如果我们可以在启动时选择服务器,我们可以使用 php-mysqlnd 模块来代替 PHP 的 php-mysql 模块。 (或者你们中的一些人可能已经在使用它,运行“phpinfo();”并搜索“mysqlnd”):

public function fetchRows(){
    ...
    $query->execute();

    $res = $query->get_result();
    while (($row = $res->fetch_assoc()))
        $result[] = $row;
    return $result;
    }
}

这对我来说似乎更简单。

关于php - Mysqli 抽象,从准备好的语句中获取数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1872064/

相关文章:

php - 暂时禁用/停止元标记刷新的按钮?

php - 无法使用 Laravel 的身份验证

php - mysqli_fetch_array() 还是 mysqli_fetch_all()?

php - 如何获取调用类的名称(在 PHP 中)

java - 如何通过使用C++中的构造函数获取父类的变量来在子类中实现抽象类方法

php - 根据查询类型和表将流量路由到特定的 MySQL 连接

php - 注册表单 : email and submit on the same

php - 将嵌套 Mysqli 查询更改为 JOIN 语句

php - SQLSTATE[HY000] : General error in Yii2 , 创建命令

php - 如何使用 mysqli 获得相同的结果?