JSON 인코딩 MySQL 결과


304

json_encode()MySQL 쿼리 결과와 함께 함수를 어떻게 사용 합니까? 행을 반복해야합니까? 아니면 전체 결과 개체에 적용 할 수 있습니까?


1
나는 이것이 매우 오래된 질문이라는 것을 알고 있습니다. 그러나 아무도 정수로 나타나는 정수 문제를 해결하는 가장 간단한 대안은 없습니다. @mouckatron은 json_encode()아래 답변에서 JSON_NUMERIC_CHECK 플래그를 제공합니다 . 간단하고 매력처럼 작동합니다! stackoverflow.com/questions/1390983/…
AlexGM

1
:에서 문자열 형-문제에 관한 일치하는 질문 + 대답이 stackoverflow.com/questions/28261613/...
마르셀 Ennix

답변:


493
$sth = mysqli_query("SELECT ...");
$rows = array();
while($r = mysqli_fetch_assoc($sth)) {
    $rows[] = $r;
}
print json_encode($rows);

이 함수에는 json_encodePHP> = 5.2 및 php-json 패키지가 필요 합니다.

참고 : mysqlPHP 5.5.0부터 사용되지 않습니다 . mysqli대신 http://php.net/manual/en/migration55.deprecated.php 확장 프로그램을 사용 하십시오 .


69
select 쿼리 중에 AS열의 이름을 public으로 바꾸는 데 사용할 때 언급하는 SELECT blog_title as title것이 좋지만 일반인은 데이터베이스에서 정확한 열이 무엇인지 알지 못합니다.
RobertPitt

14
이 코드는 모든 숫자 값을 문자열로 잘못 인코딩합니다. 예를 들어, score라는 mySQL 숫자 필드의 JSON 값은 12가 아니라 "12"입니다 (따옴표에 유의하십시오).
Theo

24
@RobertPitt, 열 이름을 숨기는 보안은 모호한 보안입니다 !
TMS

4
@Tomas는 사실이지만 정확한 열 이름을 알면 SQL 주입 공격이 훨씬 쉬워집니다.
Tim Seguine

16
@Tim : 열 이름을 알고있는 시점이 이미 잃어버린 SQL 주입에 대한 유일한 장벽에 도달했다면 아닙니다.
Paolo Bergantino

44

이것을 시도하십시오, 이것은 당신의 개체를 올바르게 만들 것입니다

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

 print json_encode($rows);

1
+1 이것은 json.org/example 의 예제와 동일한 형식으로 JSON을 제공하는 유일한 답변 인 것 같습니다 .
ban-geoengineering

예,이 예는 행당 키를 제공합니다.
Mar

26

http://www.php.net/mysql_query 는 " mysql_query()리소스를 반환합니다 "라고 말합니다 .

http://www.php.net/json_encode 는 "자원을 제외한"모든 값을 인코딩 할 수 있다고 말합니다.

배열에서 배열로 데이터베이스 결과를 반복하여 수집해야합니다 json_encode.


2
mysql_query는 결과 집합을 반환하지 않습니다. 그것이 mysql_fetch *를위한 것입니다.
Andy

음 ... 그래 ... 그게 mysql_query와 json_encode 사이의 반복입니다. 잘 했어, 왓슨
휴 Bothwell

17

고마워 이것은 많은 도움이되었습니다. 내 코드 :

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

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

echo json_encode($rows);

이것은 하나의 배열을 제공합니다; 1) 빈 대괄호 2) 반환 된 결과 행이 포함 된 중괄호 뒤에 다른 것과 다른 점은 무엇입니까?
gumuruh

11

고마워. 내 대답은 간다.

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";
        }

9

위의 경험에서는 배열의 루트 요소 이름을 무언가로 지정하기 전에 그 전에 최종 json에서 아무것도 액세스 할 수 없었습니다.

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

그 트릭을해야합니다!

평가


8

아래 코드는 여기에서 잘 작동합니다!

<?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);
?>

5

숫자 값 주위에 음성 표시를 멈추는 것을 멈추는 간단한 수정 ...

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;
}   

5

죄송합니다. 질문 후에 매우 길지만

$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

GROUP_CONCAT()의해 제한되는 것을주의하십시오 group_concat_max_len.
eggyal

4

Paolo Bergantino의 답변을 다음과 같이 단순화 할 수 있습니다

$sth = mysql_query("SELECT ...");
print json_encode(mysql_fetch_assoc($sth));

4
<?php
define('HOST','localhost');
define('USER','root');
define('PASS','');
define('DB','dishant');

$con = mysqli_connect(HOST,USER,PASS,DB);


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

 $sql = "select * from demo ";

 $sth = mysqli_query($con,$sql);

$rows = array();

while($r = mysqli_fetch_array($sth,MYSQL_ASSOC)) {

 $row_array['id'] = $r;

    **array_push($rows,$row_array);**
}
echo json_encode($rows);

mysqli_close($con);
?>

aarray_push ($ 행, $ 행 _ 배열); 그렇지 않으면 배열을 빌드하는 데 도움이되지만 while 루프의 마지막 값을 제공합니다

이 작업 은 Java 에서 StringBuilder의 append 메소드 와 같습니다.


3

FOR 루프를 사용하는 또 다른 옵션 :

 $sth = mysql_query("SELECT ...");
 for($rows = array(); $row = mysql_fetch_assoc($sth); $rows[] = $row);
 print json_encode($rows);

유일한 단점은 예를 들어 while 또는 특히 foreach 루프가 느리다는 것입니다


3

예를 들어 $ result = mysql_query ( "SELECT * FROM userprofiles 여기서 NAME = 'TESTUSER'");

1.) $ result가 하나의 행일 경우

$response = mysql_fetch_array($result);
echo json_encode($response);

2.) $ result가 둘 이상의 행인 경우. 행을 반복하고 배열에 저장하고 배열이있는 json을 반환해야합니다.

$rows = array();
if (mysql_num_rows($result) > 0) {
    while($r = mysql_fetch_assoc($result)) {
       $id = $r["USERID"];   //a column name (ex.ID) used to get a value of the single row at at time
       $rows[$id] = $r; //save the fetched row and add it to the array.
    }
}    
echo json_encode($rows);

3

나는 같은 요구 사항이 있습니다. 아래 코드를 사용하여 결과 객체를 JSON 형식으로 인쇄하고 싶습니다. 나는 당신이 뭔가를 찾을 수 있기를 바랍니다.

// Code of Conversion
$query = "SELECT * FROM products;";
$result = mysqli_query($conn , $query);

if ($result) {
echo "</br>"."Results Found";

// Conversion of result object into JSON format
$rows = array();
while($temp = mysqli_fetch_assoc($result)) {
    $rows[] = $temp;
}
echo "</br>" . json_encode($rows);

} else {
    echo "No Results Found";
}

3

mysql_fetch 및 json_encode 사용에 대해서는 아래 코드를 확인하십시오. 행을 반복해야하지만 mysqli를 사용하면 상황이 변경됩니다.

$kt_query="SELECT * FROM tbl_xxx";
$kt_result = mysql_query($kt_query) or die('Query failed: ' . mysql_error());
$rows= array();
while($sonuc=mysql_fetch_assoc($kt_result))
{
    $rows[]=$sonuc;
}
print json_encode($rows);

3

나는 이렇게 풀었다

$stmt->bind_result($cde,$v_off,$em_nm,$q_id,$v_m);
    $list=array();
    $i=0;
    while ($cresult=$stmt->fetch()){    


        $list[$i][0]=$cde;
        $list[$i][1]=$v_off;
        $list[$i][2]=$em_nm;
        $list[$i][3]=$q_id;
        $list[$i][4]=$v_m;
        $i=$i+1;
    }
    echo json_encode($list);        

이것은 결과 세트로 ajax로 반환되고 다음과 같이 javascript 부분에서 json 구문 분석을 사용합니다.

obj = JSON.parse(dataX);

2
$array = array();
$subArray=array();
$sql_results = mysql_query('SELECT * FROM `location`');

while($row = mysql_fetch_array($sql_results))
{
    $subArray[location_id]=$row['location'];  //location_id is key and $row['location'] is value which come fron database.
    $subArray[x]=$row['x'];
    $subArray[y]=$row['y'];


 $array[] =  $subArray ;
}
echo'{"ProductsData":'.json_encode($array).'}';

2

암호:

$rows = array();

while($r = mysqli_fetch_array($result,MYSQL_ASSOC)) {

 $row_array['result'] = $r;

  array_push($rows,$row_array); // here we push every iteration to an array otherwise you will get only last iteration value
}

echo json_encode($rows);


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.