【问题标题】:What's wrong with mysqli::get_result? [duplicate]mysqli::get_result 有什么问题? [复制]
【发布时间】:2011-08-20 17:55:01
【问题描述】:

我有以下代码:

$postId = $_GET['postId'];
$mysqli = new mysqli('localhost', 'username', 'database', 'name_db');
mysqli_report(MYSQLI_REPORT_ALL);

$stmt = $mysqli->stmt_init();
$stmt->prepare("
SELECT *
FROM posts
WHERE postId = ?
");
$stmt->bind_param('i', $postId);
$stmt->execute();
$result = $stmt->get_result();//Call to undefined method 
$info = $result->fetch_array(MYSQLI_ASSOC);
echo json_encode($info);

我收到上面标记的一些错误。我做错了什么?

编辑:

将 fecth_array() 更改为 fetch_array()

【问题讨论】:

    标签: php mysqli


    【解决方案1】:

    正如其他人所说,它仅在最前沿的 PHP 中可用。你可以这样做(answer to a similar question):

    function bind_array($stmt, &$row) {
        $md = $stmt->result_metadata();
        $params = array();
        while($field = $md->fetch_field()) {
            $params[] = &$row[$field->name];
        }
    
        call_user_func_array(array($stmt, 'bind_result'), $params);
    }
    
    // ....
    bind_array($stmt, $info);
    $stmt->fetch();
    
    echo json_encode($info);
    

    如果您有一个不带参数的简单查询,则使用mysqli::query - 不要将它与动态生成的 SQL 语句一起使用

    【讨论】:

    • 请不要建议将准备好的语句“降级”为标准字符串。让人们走另一条路已经够难的了。
    • @Tomalak Geret'kal:是的 - 感谢您的提醒,我添加了免责声明。不确定我是否应该完全删除引用。
    • 奇怪的是,“降级”是 PHP 在某些情况下给我们的唯一真正选择。
    • 我尝试使用 wile stms->fetch() 但它跳过了第一条记录。我们如何循环所有结果记录?
    【解决方案2】:

    如 php 文档 mysqli_stmt::get_result 中所述,自 PHP 5.3.0 起支持此方法。

    并且在用户注释部分中声明:

    此方法需要 mysqlnd 驱动程序。否则你会得到这个错误:Call to undefined method mysqli_stmt::get_result()

    【讨论】:

      【解决方案3】:

      您可能使用的是旧版本的 PHP,不支持手册页中所述的 get_result()

      (No version information available, might only be in SVN)
      

      【讨论】:

      • 这是对的。这通常意味着该功能没有发布。
      【解决方案4】:

      manual page 没有明确说明get_result() 工作所需的最低 PHP 版本:

      (没有可用的版本信息,可能仅在 SVN 中)

      我不知道这件事的背景,但它可能在您的 PHP 版本中根本不可用。

      您可以改用fetch()

      【讨论】:

      • 好吧,我想可能是这样。但是我能问一下如何使用 mysqli 和prepared statements 获取结果集中的行吗?
      • 我不喜欢使用 fetch,因为我有很多列。还有其他方法吗?
      • @Woho fetch_array() 例如
      【解决方案5】:

      我猜是下面那一行,改一下:

      $info = $result->fecth_array(MYSQLI_ASSOC);
      

      到:

      $info = $result->fetch_array(MYSQLI_ASSOC);
      

      【讨论】:

      • 好的改变了。但是php在mysqli::fetch_array();之前发出错误;
      【解决方案6】:

      检查你的 PHP mysql 原生驱动是否启用。 get->result() 仅在启用 mysql 本机驱动程序时有效。 http://www.php.net/manual/en/mysqli-stmt.get-result.php

      【讨论】:

        猜你喜欢
        • 2012-07-16
        • 2013-07-12
        • 2019-04-11
        • 2016-04-15
        • 2016-03-20
        • 2020-06-17
        • 1970-01-01
        • 2012-05-31
        • 2019-12-16
        相关资源
        最近更新 更多