PHP вставляет переменные в массив, но не может json_encode - PullRequest
0 голосов
/ 26 мая 2018

Я занимался этим в течение нескольких дней, я проверял, заполняются ли переменные, и они есть, но я думаю, что почему-то я не делаю массив правильно, потому что 'echo json_encode ($ response)' ничего не печатает.Я также попытался заменить переменные в массиве просто случайными числами, и все прошло нормально, только с переменными работает.

public function getPlaces() {
    $places = array();
    $stmt = "SELECT * FROM poi ";
    $retval = mysqli_query( $this->conn, $stmt ); 

    if ($retval) {
        while($row=mysqli_fetch_array($retval)) { 
            $name = $row["name"]; 
            $lat = $row["latitude"];
            $lng = row["longitude"];
            $desc = $row["descricao"];
            $rating = $row["rating"];
            $lm = $row["lm"];
            $la = $row["la"];
            $lv = $row["lv"];

            $places[] = array('name'=> $name, 'lat'=> $lat, 'lng'=> $lng, 'desc'=> $desc, 'rating'=> $rating,
                'lm'=> $lm, 'la'=> $la, 'lv'=> $lv);
        }

        return $places;            

    }else
        return false;        
}

Функция вызывается здесь:

require_once 'include/DB_Functions.php';
$db = new DB_Functions();

$response = array("error" => FALSE);

$places = $db->getPlaces();

if ($places != false) {
    $response["places"] = $places;

    echo json_encode($response);
} else {
    $response["error"] = TRUE;
    $response["error_msg"] = "Error";
    echo json_encode($response);
}

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Вы заметили, что $ отсутствует перед переменной $ row в этой строке?

$ lng = row ["longitude"];

Такого родапропущено (плохо обработано) Замечание + Предупреждение не сделает ваш массив.Также обратите внимание, что если ваш массив заполнен каким-либо типом значения, он не будет json_encode.Особенно значения NaN (учитывая это из-за природы некоторых полей, таких как «рейтинг», которые могут привести к значению NaN).

Попробуйте пошагово: сбросьте ваш результат только для одной строки с LIMIT 1 в вашемSQL-запрос, чтобы увидеть, работает ли он.Попробуйте только с одним полем ...

Обратите внимание, что $places = [];

более оптимизирован, чем $places = array();

То же самое с $places[] = ['name'=> $name, ... ];

0 голосов
/ 26 мая 2018

Вместо использования ассоциативного массива используйте mysqli_fetch_object(), чтобы получить результирующий набор как объект.Вам не нужно вводить все имена полей, если вы используете array_push () .

while($row=mysqli_fetch_object($retval)):
      array_push($places, $row);          
endwhile;

Vardump массив $places для проверки массива.

Например

vardump($places); die; 

или

print_r($places); die;
...