【问题标题】:mysqli_stmt_get_result alternative for php 5.2.6 [duplicate]mysqli_stmt_get_result 替代 php 5.2.6
【发布时间】:2012-10-11 09:03:06
【问题描述】:

我不是php专家,我开发了一个查询mysql db的小服务。

但是我用 php 5.4 开发,然后发现我的虚拟主机计划有 5.2.6,所以我在一些未定义的函数上遇到了一些问题。

具体来说,在这种情况下,如何解决 > 5.3 上可用的 mysqli_stmt_get_result 未定义函数?代码如下:

  $stmt = mysqli_prepare($con,$db_query);

  if($stmt) {

     mysqli_stmt_bind_param($stmt,'ss',$after,$lang);
     mysqli_stmt_execute($stmt);
     $result = mysqli_stmt_get_result($stmt); // <-- getting undefined error here !!!

     $updated = array();
     $deleted = array();

     while($row = mysqli_fetch_assoc($result)) {

        if($row['status']==1) {
           array_push($updated,$row);
        } else {
           $cardName=$row['cardName'];
           $cardStatus=$row['status'];
           $cardId=$row['cardId'];
           $language=$row['language'];
           array_push($deleted,array(
                    'cardName'=>$cardName,
                                    'status'=>$cardStatus,
                                    'cardId'=>$cardId,
                                    'language'=>$language
                               )
           );
        }
     }

     $response = array(
        'cards'=>array(
           'updated'=>$updated,
           'deleted'=>$deleted
        )
     );

     $json = json_encode($response);
     mysqli_close($con);
     echo $json;

  }

关键是我使用的是准备好的语句,由于我缺乏 php 知识,我发现没有其他方法可以在不重写整个脚本的情况下解决问题。

我认为你们中的一些人可能有一个简单易行的解决方案。

【问题讨论】:

标签: php mysql mysqli php-5.2


【解决方案1】:

遇到了类似的问题。顺便说一句 - mysqlnd 在 5.3 中可用,但它必须在 5.4 中编译,默认情况下它在那里。

就我而言,我能够保留我的大部分代码并通过替换以下代码使其工作

$result = mysqli_stmt_get_result($stmt); // <-- doesn't work without mysqlnd
while($row = mysqli_fetch_assoc($result)) {
    $cardName=$row['cardName'];
    ...
}

$stmt->bind_result($dbCardId, $dbCardName);  // <-- one param for each field returned
while ($stmt->fetch()) {
    $cardName = $dbCardName;
    ...
}

【讨论】:

    【解决方案2】:

    mysqli_stmt_get_result 函数仅适用于 PHP 5.3 或更高版本。您的 PHP 5.2.x 版本不存在它(顺便说一句,不再支持它。)。

    替代方法是将mysqli_stmt_bind_result 与变量绑定一起使用。

    在您的具体示例中,这甚至具有您不需要将数组成员分配给变量的好处,因为您可以直接绑定变量。

    之所以引入mysqli_stmt_get_result 函数,是因为someone thought 这会妨碍您获取数组。

    【讨论】:

    • 我最后确实使用了 mysqli_stmt_bind_result。但是我的字段很少,所以我不得不多写几行。我希望有一些“更清洁”的东西。不过,我不明白为什么提供商不升级到最新的软件版本!我读到 5.2.x 是 2008 年的旧版本!
    【解决方案3】:

    如果您处于不允许添加 mysqlnd 的情况,这显示了如何在没有 mysqli_stmt_get_result() 的情况下将数据获取到关联数组中。 Mysqli - Bind results to an Array

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 2015-04-22
      相关资源
      最近更新 更多