#php #json
#php #json
Вопрос:
Я новичок в php, и мне действительно не помешала бы некоторая помощь.
У меня есть php-файл, который возвращает запрошенную информацию в неправильном порядке или не возвращает ее вообще, изменяя переменные в php-файле, мне удается получить желаемые результаты.
И все же, как это возможно, учитывая следующие файлы?
Первый php-файл возвращает устаревшую ИНФОРМАЦИЮ
<?php
$con = mysqli_connect("localhost", "user", "password", "user");
//$idquestion = @($_POST['idquestion']);
//$category = @($_POST['category']);
$idquestion="1";
$category="computers";
$statement = mysqli_prepare($con, "SELECT * FROM question WHERE idquestion=? AND category=?;");
mysqli_stmt_bind_param($statement, "is", $idquestion, $category);
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement, $success, $idquestion, $question, $id);
$response = array();
$response["success"] = false;
while(mysqli_stmt_fetch($statement)){
$response["success"] = true;
$response["idquestion"] = $idquestion;
$response["question"] = $question;
$response["id"] = $id;
}
echo json_encode($response);
?>
Вывод
{"success":true,"idquestion":"Top programming languages?","question":"computers","id":1}
И второй php-файл возвращает ПРАВИЛЬНУЮ ИНФОРМАЦИЮ
<?php
$con = mysqli_connect("localhost", "id8963226_user", "parola123", "id8963226_user");
//$idquestion = @($_POST['idquestion']);
//$category = @($_POST['category']);
$idquestion="4";
$category="computers";
$statement = mysqli_prepare($con, "SELECT * FROM question WHERE idquestion=? AND category=?;");
mysqli_stmt_bind_param($statement, "is", $idquestion, $category);
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement, $success, $idquestion, $question, $id);
$response = array();
$response["success"] = false;
$response["idquestion"] = $idquestion;
while(mysqli_stmt_fetch($statement)){
$response["success"] = true;
$response["question"] = $idquestion;
$response["id"] = $id;
}
echo json_encode($response);
?>
Вывод
{"success":true,"idquestion":"1","question":"Top programming languages?","id":1}
Как логика, лежащая в основе первого php-файла, дала мне эти результаты?
В принципе, я хочу, чтобы ПОСЛЕДНИЕ РЕЗУЛЬТАТЫ работали без искажения кода.
Приветствуется любое мнение. Спасибо.
Комментарии:
1. В следующий раз, пожалуйста, четко объясните различия, сравнивать 2 блока кода по вертикали сложно…
2. Проблема в том, что мне нужно, чтобы вывод был idquestion = 1, question = top programming lang, id = 1
3. Как вы можете видеть, первый php возвращает idquestion = top programming lang, что совершенно неверно
4. Все еще не могу разобраться с актуальной проблемой. Вы говорите, что это неправильно, потому что? Я имею в виду, мы не можем видеть вашу базу данных или данные, поэтому мы здесь в полном неведении.
5. Он не возвращает неверную информацию, вы неправильно ее кодируете
Ответ №1:
В вашем запросе, который вы используете SELECT *
другими словами, вы позволяете Mysql возвращать все столбцы в порядке, который он определяет. Этот порядок, вероятно, будет порядком, в котором были определены столбцы, но в основном вы не контролируете порядок столбцов.
Также более эффективно запрашивать только те столбцы, которые вам действительно нужны в любом случае.
Итак, измените запрос на
$statement = mysqli_prepare($con, "SELECT idquestion, question, id
FROM question
WHERE idquestion=? AND category=?;");
Теперь вы контролируете порядок возврата столбцов.
Итак, когда вы запускаете это
mysqli_stmt_bind_param($statement, "is", $idquestion, $category);
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement, $idquestion, $question, $id);
Значения столбцов перейдут в правильные переменные.
Комментарии:
1. Действительно, это была проблема. теперь я вспоминаю, что я изменил некоторые столбцы еще при создании таблицы вопросов, поэтому.. Я думаю, даже если порядок столбцов был таким же с переменными, они попали не в то место.
2. выбор каждой переменной решил проблему. большое спасибо