mysqli_stmt_get_result альтернатива для php 5.2.6

Я не эксперт 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 ответа

Решение

mysqli_stmt_get_result функция только PHP 5.3 или выше. Он не существует для вашей версии PHP 5.2.x (которая, кстати, больше не поддерживается).

Альтернатива заключается в использовании mysqli_stmt_bind_result с переменными привязками.

В вашем конкретном примере это дает даже то преимущество, что вам не нужно присваивать переменные массива переменным, потому что вы можете напрямую связать переменные.

mysqli_stmt_get_result Функция была введена, потому что кто-то думал, что это будет стоять у вас на пути, и получить массив было бы проще.

Была похожая проблема. Кстати, 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;
    ...
}

Если вы находитесь в ситуации, когда вам не разрешено добавлять mysqlnd, это показывает, как получить данные в ассоциативный массив без mysqli_stmt_get_result (). Mysqli - привязать результаты к массиву

Другие вопросы по тегам