mysqli_stmt_get_result alternative for php 5.2.6

2019-01-20 06:14发布

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条回答
甜甜的少女心
2楼-- · 2019-01-20 06:28

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

查看更多
Anthone
3楼-- · 2019-01-20 06:35

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.

查看更多
趁早两清
4楼-- · 2019-01-20 06:44

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;
    ...
}
查看更多
登录 后发表回答