JSON кодирует результаты MySQL - PullRequest
292 голосов
/ 20 декабря 2008

Как использовать функцию json_encode() с результатами запросов MySQL? Нужно ли перебирать строки или я могу применить их ко всему объекту результатов?

Ответы [ 21 ]

474 голосов
/ 20 декабря 2008
$sth = mysqli_query("SELECT ...");
$rows = array();
while($r = mysqli_fetch_assoc($sth)) {
    $rows[] = $r;
}
print json_encode($rows);

Для функции json_encode требуется PHP> = 5.2 и пакет php-json - как уже упоминалось здесь

ПРИМЕЧАНИЕ : mysql устарело с PHP 5.5.0, вместо него следует использовать расширение mysqli http://php.net/manual/en/migration55.deprecated.php.

42 голосов
/ 22 января 2011

Попробуйте, это создаст ваш объект правильно

 $result = mysql_query("SELECT ...");
 $rows = array();
   while($r = mysql_fetch_assoc($result)) {
     $rows['object_name'][] = $r;
   }

 print json_encode($rows);
25 голосов
/ 20 декабря 2008

http://www.php.net/mysql_query говорит "mysql_query() возвращает ресурс".

http://www.php.net/json_encode говорит, что может кодировать любое значение «кроме ресурса».

Вам нужно перебрать и собрать результаты базы данных в массив, затем json_encode массив.

16 голосов
/ 24 мая 2011

Спасибо, это мне очень помогло. Мой код:

$sqldata = mysql_query("SELECT * FROM `$table`");

$rows = array();
while($r = mysql_fetch_assoc($sqldata)) {
  $rows[] = $r;
}

echo json_encode($rows);
10 голосов
/ 16 июня 2015

Спасибо .. мой ответ звучит так:

if ($result->num_rows > 0) {
            # code...
            $arr = [];
            $inc = 0;
            while ($row = $result->fetch_assoc()) {
                # code...
                $jsonArrayObject = (array('lat' => $row["lat"], 'lon' => $row["lon"], 'addr' => $row["address"]));
                $arr[$inc] = $jsonArrayObject;
                $inc++;
            }
            $json_array = json_encode($arr);
            echo $json_array;
        }
        else{
            echo "0 results";
        }
8 голосов
/ 15 ноября 2009

Выше не сработает, по моему опыту, прежде чем вы назовете корневой элемент в массиве к чему-то, я не смог получить доступ к чему-либо в окончательный JSON до этого.

$sth = mysql_query("SELECT ...");
$rows = array();
while($r = mysql_fetch_assoc($sth)) {
    $rows['root_name'] = $r;
}
print json_encode($rows);

Это должно сработать!

Pär

7 голосов
/ 13 марта 2014

Код ниже работает отлично здесь

<?php

  $con=mysqli_connect("localhost",$username,$password,databaseName);

  // Check connection
  if (mysqli_connect_errno())
  {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

  $query = "the query here";

  $result = mysqli_query($con,$query);

  $rows = array();
  while($r = mysqli_fetch_array($result)) {
    $rows[] = $r;
  }
  echo json_encode($rows);

  mysqli_close($con);
?>
4 голосов
/ 01 октября 2012

Извините, это очень долго после вопроса, но:

$sql = 'SELECT CONCAT("[", GROUP_CONCAT(CONCAT("{username:'",username,"'"), CONCAT(",email:'",email),"'}")), "]") 
AS json 
FROM users;'
$msl = mysql_query($sql)
print($msl["json"]);

Просто в основном:

"SELECT" Select the rows    
"CONCAT" Returns the string that results from concatenating (joining) all the arguments
"GROUP_CONCAT" Returns a string with concatenated non-NULL value from a group
4 голосов
/ 21 августа 2012

Мое простое исправление, чтобы прекратить ставить речевые метки вокруг числовых значений ...

while($r = mysql_fetch_assoc($rs)){
    while($elm=each($r))
    {
        if(is_numeric($r[$elm["key"]])){
                    $r[$elm["key"]]=intval($r[$elm["key"]]);
        }
    }
    $rows[] = $r;
}   
3 голосов
/ 17 февраля 2014

мы могли бы упростить Паоло Бергантино ответить вот так

$sth = mysql_query("SELECT ...");
print json_encode(mysql_fetch_assoc($sth));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...