programing

JSON 인코딩 MySQL 결과

copysource 2022. 10. 11. 22:46
반응형

JSON 인코딩 MySQL 결과

「 」의 json_encode()MySQL 쿼 my my my my my my my my my my?행체체 복복 ?복 ???아니면 결과 객체 전체에 적용할 수 있습니까?

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

★★json_encodePHP > = 5.2 및 php-json 패키지가 필요합니다(여기 참조).

주의:mysql 5.5.PHP 5.5.0을 사용합니다.mysqlihttp://php.net/manual/en/migration55.deprecated.php 대신 확장자를 사용합니다.

이렇게 하면 개체가 올바르게 생성됩니다.

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

 print json_encode($rows);

http://www.php.net/mysql_query 에서는, 다음과 같이 말하고 있습니다.mysql_query()리소스를 반환합니다.

http://www.php.net/json_encode 에서는, 「리소스 제외」의 임의의 값을 부호화할 수 있다고 합니다.

. 그 다음 배열로 수집해야 합니다.json_encode어레이

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

PDO 사용 시

모든 행을 연관 배열로 가져오는 데 사용합니다.

$stmt = $pdo->query('SELECT * FROM article');
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($rows);

SQL에 매개 변수가 있는 경우:

$stmt = $pdo->prepare('SELECT * FROM article WHERE id=?');
$stmt->execute([1]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($rows);

는 키 재생성하다를 하면 됩니다.foreach이치노

$stmt = $pdo->prepare('SELECT * FROM article WHERE id=?');
$stmt->execute([1]);

$rows = [];
foreach ($stmt as $row) {
    $rows[] = [
        'newID' => $row['id'],
        'Description' => $row['text'],
    ];
}

echo json_encode($rows);

mysqli 사용 시

모든 행을 연관 배열로 가져오는 데 사용합니다.

$res = $mysqli->query('SELECT * FROM article');
$rows = $res->fetch_all(MYSQLI_ASSOC);
echo json_encode($rows);

SQL에 매개 변수가 있는 경우 준비/바인드/실행/get_result를 수행해야 합니다.

$id = 1;
$stmt = $mysqli->prepare('SELECT * FROM article WHERE id=?');
$stmt->bind_param('s', $id); // binding by reference. Only use variables, not literals
$stmt->execute();
$res = $stmt->get_result(); // returns mysqli_result same as mysqli::query()
$rows = $res->fetch_all(MYSQLI_ASSOC);
echo json_encode($rows);

는 키 재생성하다를 하면 됩니다.foreach이치노

$stmt = $mysqli->prepare('SELECT * FROM article WHERE id=?');
$stmt->bind_param('s', $id);
$stmt->execute();
$res = $stmt->get_result();

$rows = [];
foreach ($res as $row) {
    $rows[] = [
        'newID' => $row['id'],
        'Description' => $row['text'],
    ];
}

echo json_encode($rows);

mysql_* API 사용 시

가능한 한 빨리 지원되는 PHP 버전으로 업그레이드하십시오! 진지하게 받아들여 주세요.오래된 API를 사용한 솔루션이 필요한 경우 다음과 같이 할 수 있습니다.

$res = mysql_query("SELECT * FROM article");

$rows = [];
while ($row = mysql_fetch_assoc($res)) {
    $rows[] = $row;
}

echo json_encode($rows);

아래 코드는 여기서 정상적으로 동작합니다!

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

제 경험상 어레이의 루트 요소에 이름을 붙이기 전에는 위의 내용이 작동하지 않습니다.그 전에는 마지막 json에 접속할 수 없었습니다.

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

그걸로 충분할 거야!

숫자 값 주위에 음성 표시를 하는 것을 멈추기 위한 나의 간단한 방법은...

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

죄송합니다. 질문 후 시간이 많이 지났습니다만,

$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
<?php

define('HOST', 'localhost');
define('USER', 'root');
define('PASS', '');
define('DB', 'dishant');

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$con = mysqli_connect(HOST, USER, PASS, DB);

$sql = "select * from demo ";
$sth = mysqli_query($con, $sql);
$rows = array();
while ($r = mysqli_fetch_array($sth, MYSQLI_ASSOC)) {
    $row_array['id'] = $r;

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

array_push($rows,$row_array);는 배열을 구축하는 데 도움이 됩니다.루프 중

은 '오빠'와 같이 합니다.append의 of의 StringBuilder★★★★★★★★★★★★★★★★★★.

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

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

유일한 단점은 for의 루프가 예를 들어 foreach보다 느리다는 것입니다.

예를 들어 $result = mysql_query("SELECT * FROM 사용자 프로필에서 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);

나는 이렇게 풀었다.

$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 parse를 사용합니다.

obj = JSON.parse(dataX);

파올로 베르간티노는 이렇게 대답할 수 있다.

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

하면 안 mysql_할 수 .mysqli_pdo pdo pdo 입니다.

으로 호출하다header("Content-type:application/json");일부 개발자는 데이터 페이로드가 베스트 프랙티스로 간주됩니다.이것은 통상 요건은 아니지만, payload의 형식을 수신할 수 있는 모든 형식으로 명확하게 합니다.

합니다.exit()이치노도 꼭 한 것은 .echo마찬가지로 동작하지만 일부 개발자는 스크립트를 명시적으로 종료하는 것이 좋다고 생각합니다.


쿼리 결과 집합 개체의 MySQLi 단일 행 결과 집합:

exit(json_encode($result->fetch_assoc()));  // 1-dimensional / flat

MySQLi:

PHP 8.1.0 이전 버전에서는 mysqlnd에서만 사용할 수 있습니다.

exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));  // 2-dimensional / array of rows

준비된 문장의 MySQLi 단일 행 결과 집합:

$result = $stmt->get_result();
exit(json_encode($result->fetch_assoc()));  // 1-dimensional / flat

준비된 문장의 MySQLi 다중 행 결과 집합:

$result = $stmt->get_result();
exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));  // 2-dimensional / array of rows

쿼리 결과 세트 개체에서 PDO 단일 행 결과 세트:

exit(json_encode($result->fetch(PDO::FETCH_ASSOC)));  // 1-dimensional / flat

쿼리 결과 집합 개체에서 PDO 다중 행 결과 집합:

exit(json_encode($result->fetchAll(PDO::FETCH_ASSOC)));  // 2-dimensional / array of rows

준비된 문장의 PDO 단일 행 결과 세트:

exit(json_encode($stmt->fetch(PDO::FETCH_ASSOC)));  // 1-dimensional / flat

준비된 문장에서 PDO 다중 행 결과 집합:

exit(json_encode($stmt->fetchAll(PDO::FETCH_ASSOC)));  // 2-dimensional / array of rows

잘못된 json이 생성되지 않도록 하려면 다음 규칙을 따르십시오.

  1. 만 하면 요.json_encode() 배열 및 배열을 한 후
  2. 써야 돼요.json_encode()payload를 부호화한다(다른 문자열 함수 또는 연결을 사용하여 json 문자열을 수동으로 작성하려는 충동을 억제한다).

데이터를 하지 않는 를 즉시 php로 할 수 .foreach()에는 배열 구문을 를 들어 access value에는 구문을 사용합니다.

$response = [];
foreach ($result as $row) {
    $row['col1'] = someFunction($row['id']);
    $response[] = $row;
}
exit(json_encode($response));

" " " 를 호출하는 json_encode()'payload' 'payload' 'payload' 'payload'조손


연결이 완료된 후 데이터베이스 연결을 명시적으로 닫을 필요가 없습니다.스크립트가 종료되면 연결이 자동으로 닫힙니다.

일반적으로 mysql에 NESTED json 객체가 없는 것을 감안하면 자신만의 인코딩 함수를 만드는 것은 매우 쉽습니다.

먼저 mysqli를 가져오는 함수는 다음과 같이 배열이 됩니다.

function noom($rz) {
    $ar = array();
    if(mysqli_num_rows($rz) > 0) {
        while($k = mysqli_fetch_assoc($rz)) {
            foreach($k as $ki=>$v) {
                $ar[$ki] = $v;
            }
        }
    }
    return $ar;
}

이제 어레이를 json으로 인코딩하는 기능을 수행합니다.

function json($ar) {
    $str = "";
    $str .= "{";
    $id = 0;
    foreach($ar as $a=>$b) {
        $id++;
        $str .= "\"".$a."\":";
        if(!is_numeric($b)) {
            $str .= "\"".$b."\"";
        } else {
            $str .= $b;
        }
        
        if($id < count($ar)) {
            $str .= ",";
        }
    }
    $str .= "}";
    return $str;
}

사용 방법:

<?php
$o = new mysqli(
    "localhost",
    "root",""
);
if($o->connect_error) {
    echo "DUDE what are you/!";
} else {
    $rz = mysqli_query($o,
        "SELECT * FROM mydatabase.mytable"
    );
    $ar = noom($rz);
    echo json($ar);
}
?>

언급URL : https://stackoverflow.com/questions/383631/json-encode-mysql-results

반응형