Хочу получить ответ в виде JSON.
Пишу такой скрипт, к которому и обращаюсь:
<?php
$con = mysqli_connect("localhost", "id1242380_reminduser", "rootroot", "id1242380_remindtbase");
$user_id = $_POST["user_id"];
$statement = mysqli_prepare($con, "SELECT * FROM ideas WHERE user_id = ?");
mysqli_stmt_bind_param($statement, "i", $user_id);
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement, $id, $user_id, $title, $text);
$response = array();
$response["success"] = false;;
while(mysqli_stmt_fetch($statement)){
$response["success"] = true;
$response["id"] = $id;
$response["user_id"] = $user_id;
$response["title"] = $title;
$response["text"] = $text;
}
echo json_encode($response);
?>
Но в ответе получаю только одну строку из бд (последнюю). Вот Logcat:
11-04 20:14:15.392 11578-11578/com.example.aydar.remind D/RESPONSETAG: onResponse: {"success":true,"id":3,"user_id":1,"title":"test_title2","text":"test_text2"}
Хотя в БД записано 3 записи и у всеx отличие только в двух последних полях. Поэтому запросу они все удовлетворяют. В чём тут дело?
Вы объявляете $response
как массив в PHP. При конвертации в JSON массив преобразуется в объект {}
или список []
в зависимости от того ассоциативный ли массив. в цикле while(fetch)
вы обходите все записи из БД и записываете значения в поля $response['id']
и т.д. Всё бы ничего, но с каждой новой итерацией while предыдущие данные перезаписываются новыми.
Приведу простой пример вашей нынешней логики без БД и циклов:
$a = 5;
$a = 10;
$a = 7;
echo $a; // Выведет 7. Логично? логично!
Я понятия не имею как вы до этого дошли, но вот простое решение вашей проблемы:
<?php
$con = mysqli_connect('localhost', 'id1242380_reminduser', 'rootroot', 'id1242380_remindtbase');
$user_id = (int) $_POST['user_id'];
$statement = mysqli_prepare($con, 'SELECT * FROM ideas WHERE user_id = ?');
mysqli_stmt_bind_param($statement, 'i', $user_id);
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement, $id, $user_id, $title, $text);
$response = ['success' => false];
$rows = [];
while(mysqli_stmt_fetch($statement)){
$rows[] = [
'id' => $id,
'user_id' => $user_id,
'title' => $title,
'text' => $text
];
}
if(sizeof($rows)) {
$response['success'] = true;
$response['response'] = $rows;
}
echo json_encode($response, JSON_PRETTY_PRINT);
В ответе вы получите что-то подобное:
{
"success": true,
"response": [{
"id": 5,
"user_id": 21354,
"title": "Купить кегли",
"text": "Кегли - это очень важно. Нужно их купить."
},
{
"id": 7,
"user_id": 21354,
"title": "Волчанка",
"text": "Саре нужны кортикостероиды."
}
]
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Установил драйвер отсюда все сделал по инструкции даже
Есть такая задача: проверить скорость работы программы путём скармливания ей большого количества случайно генерируемых данных данных
Часто пишут что с не-стандартным аллокатором код может работать быстрее, а как вообще написать свой аллокатор?
Как сделать список, содержащий итераторы на этот же список? Такой код, очевидно, не компилируется: