Я пытаюсь экспортировать запрос mysql (select) в массив json массива, так что JSON.parse
в javascript вернет массив массивов, а не массив объектов, как то, что произойдет после ответов на аналогичные ранее заданные вопросы.
Что нужно изменить для перевода запроса mysql в массив json массива?
Чтобы json_encode
возвращал массив массивов JSON, вам нужен массив с числовой индексацией.
Это можно получить с помощью следующей общей функции:
function SqlSelectToJsonTable($result,$withNames=false){ // result a mysqli::query object, // withNames: boolean, should the column names be returned as first row $return_arr = array(); echo $result->num_rows; if ($result->num_rows > 0){ if($withNames == true){ $return_arr[0] = array(); $fields = $result->fetch_fields(); foreach ($fields as $field){ echo "column: ".$field->name." "; array_push($return_arr[0],$field->name); } } while($row = $result->fetch_assoc()) { $return_arr[]= array_values($row); } } else { echo "0 results"; } return json_encode($return_arr); }
Используется как в следующем:
<?php $servername = "localhost"; $username = "user"; $password = "password"; $dbname = "test"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT id, title FROM Posts"; $result = $conn->query($sql); $jsonTable = SqlSelectToJsonTable($result); echo '<br/>'.$jsonTable; echo "<script type=\"text/javascript\"> var jsTable = JSON.parse('".$jsonTable."'); </script>"; $conn->close(); ?>
Где jsTable будет эффективно представлять собой массив массивов. Обратите внимание на параметр withNames
позволяющий добавлять имена столбцов в первую строку, полезно, если вы попытаетесь передать этот массив в javascript для визуализации google .