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 - привязать результаты к массиву