duanou2526
duanou2526
2012-10-21 09:04

php 5.2.6的mysqli_stmt_get_result替代方案

已采纳

I am not an expert of php, I developed a small service which query a mysql db.

However I developed with php 5.4, and then discovered that my web hosting plan has 5.2.6, so I am having few problems with some undefined function.

Specifically, in this case, how can I solve the mysqli_stmt_get_result undefined function available on > 5.3 ? Here is the code:

  $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;

  }

The point is that I am using a prepared statement, due to my lack of php knowledge I found no other way of resolving the issue without rewriting the whole script.

I thought that some of you may have a simple and easy solution.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • dongse5408 dongse5408 9年前

    The mysqli_stmt_get_result function is PHP 5.3 or greater only. It does not exist for your PHP 5.2.x version (which is not supported any longer btw.).

    The alternative is to use mysqli_stmt_bind_result with variable bindings.

    In your concrete example this has even the benefit that you do not need to assign the array members to variables, because you can bind the variables directly.

    The mysqli_stmt_get_result function was introduced because someone thought this would stand in your way and getting an array would have been easier.

    点赞 评论 复制链接分享
  • douzha6055 douzha6055 3年前

    If you are in a situation where you aren't allowed to add mysqlnd, this shows how to get data into an an associative array without mysqli_stmt_get_result(). Mysqli - Bind results to an Array

    点赞 评论 复制链接分享
  • drbi19093 drbi19093 9年前

    Had a similar problem. BTW - mysqlnd is available with 5.3, but it has to be compiled in. 5.4, it's there by default.

    In my case, I was able to keep most of my code and make it work by replacing the following

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

    with

    $stmt->bind_result($dbCardId, $dbCardName);  // <-- one param for each field returned
    while ($stmt->fetch()) {
        $cardName = $dbCardName;
        ...
    }
    
    点赞 评论 复制链接分享

相关推荐