php 5.2.6的mysqli_stmt_get_result替代方案

时间:2012-10-21 09:04:42

标签: php mysql mysqli php-5.2

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

然而我用php 5.4开发,然后发现我的网络托管计划有5.2.6,所以我对一些未定义的功能几乎没有问题。

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

  $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知识,我发现在没有重写整个脚本的情况下我找不到解决问题的其他方法。

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

3 个答案:

答案 0 :(得分:6)

有类似的问题。 BTW - 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;
    ...
}

答案 1 :(得分:0)

mysqli_stmt_get_result函数仅为PHP 5.3或更高版本。它不适用于您的PHP 5.2.x版本(不再支持btw。)。

另一种方法是使用带有变量绑定的mysqli_stmt_bind_result

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

我引入了mysqli_stmt_get_result函数,因为someone thought这会妨碍您使用数组会更容易。

答案 2 :(得分:0)

如果您处于不允许添加mysqlnd的情况,则会显示如何在没有mysqli_stmt_get_result()的情况下将数据导入关联数组。 Mysqli - Bind results to an Array