JSON MySQL sonuçlarını kodlar


304

json_encode()MySQL sorgu sonuçlarıyla işlevi nasıl kullanabilirim ? Satırlar arasında yineleme yapmam gerekir mi yoksa yalnızca tüm sonuç nesnesine uygulayabilir miyim?


1
Bunun çok eski bir soru olduğunu biliyorum. Ancak hiç kimse, dize olarak gösterilen tamsayı sorununu çözmenin en basit alternatifini göstermiyor. @mouckatron, aşağıdaki cevapta JSON_NUMERIC_CHECK bayrağını sunmaktadır json_encode(). Basit ve bir cazibe gibi çalışır! stackoverflow.com/questions/1390983/…
AlexGM

1
Dize türü sorunla ilgili eşleşen bir soru + yanıt var: stackoverflow.com/questions/28261613/…
Marcel Ennix

Yanıtlar:


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

İşlev json_encodePHP> = 5.2 ve php-json paketine ihtiyaç duyar - burada belirtildiği gibi

NOT : mysqlPHP 5.5.0'dan beri kullanımdan kaldırılmıştır, mysqlibunun yerine http://php.net/manual/en/migration55.deprecated.php uzantısını kullanın .


69
Seçtiğiniz sorgu sırasında ASsütunları halka açık gibi bir şeye yeniden adlandırmak için kullanmak için bahsetmenizi tavsiye ederim SELECT blog_title as title, bu daha temiz ve halkın tam sütunları veritabanından ne olduğunu bilmiyorum.
RobertPitt

14
Bu kod yanlışlıkla tüm sayısal değerleri dize olarak kodlar. Örneğin, skor adı verilen bir mySQL sayısal alanının, 12 yerine JSON değeri "12" olur (tırnaklara dikkat edin).
Theo

24
@RobertPitt, sütunlarınızın gizli isimlerini temel alan güvenlik, belirsiz bir güvenliktir !
TMS

4
@Tomas doğru, ancak tam sütun adlarını bilmek SQL enjeksiyon saldırılarını oldukça kolaylaştırıyor
Tim Seguine

16
@Tim: Sütun adlarınızın bilindiği noktaya, zaten kaybettiğiniz SQL enjeksiyonuna karşı tek engel oluyorsa, değil mi?
Paolo Bergantino

44

Bunu deneyin, bu nesnenizi düzgün bir şekilde oluşturur

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

 print json_encode($rows);

1
+1 JSON'u json.org/example adresindeki örneklerle aynı biçimde sağlayan tek yanıt bu gibi görünüyor .
ban-geoengineering

Evet, bu örnek her satıra bir anahtar verir.
Mar

26

http://www.php.net/mysql_query " mysql_query()bir kaynak döndürür " diyor .

http://www.php.net/json_encode , "kaynak hariç" herhangi bir değeri kodlayabileceğini söylüyor.

Yinelenmeli ve veritabanı sonuçlarını önce bir dizi, sonra dizi toplamanız gerekir json_encode.


2
mysql_query bir sonuç kümesi döndürmez. mysql_fetch * bunun içindir.
Andy

Um ... evet ... mysql_query ve json_encode arasında yinelemede olan şey bu. İyi işti, Watson.
Hugh Bothwell

17

Teşekkürler bu bana çok yardımcı oldu. Kodum:

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

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

echo json_encode($rows);

bu, bize içeren bir dizi verecektir; 1) boş bir köşeli parantez 2) ardından döndürülen sonuç satırlarımızı içeren kıvrık parantez bu diğerinden farkı nedir?
gumuruh

11

Teşekkürler .. cevabım şöyle:

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

Yukarıdaki çalışma, benim deneyim, dizi bir şey için kök-eleman adını önce işe yaramazsa, ben daha önce son json hiçbir şey erişemedim.

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

Hile yapmalı!

Pär


8

Aşağıdaki kod burada iyi çalışıyor!

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

Sayısal değerlerin etrafına konuşma işaretleri koymayı durdurmak için basit çözümüm ...

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

Üzgünüz, bu sorudan sonra çok uzun, ama:

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

Temel olarak:

"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()Sınırlı dikkat edin group_concat_max_len.
eggyal

4

Paolo Bergantino'nun cevabını bu şekilde basitleştirebiliriz

$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 ($ satırlar, $ row_array); dizi oluşturmak için yardım aksi halde while döngüsünde son değeri verir

gibi bu çalışma ekleme yöntemiyle StringBuilder içinde java


3

FOR döngüsünü kullanarak bir seçenek daha:

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

Tek dezavantajı, for döngüsünün daha yavaş olmasıdır, örn.


3

Örneğin $ sonuç = mysql_query ("SELECT * FROM kullanıcı profillerinden burada NAME = 'TESTUSER'");

1.) $ sonucu yalnızca bir satırsa.

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

2.) $ sonucu birden fazla satırsa. Satırları yinelemeniz ve bir diziye kaydetmeniz ve dizide bir json döndürmeniz gerekir.

$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

Aynı gereksinime sahibim. Ben sadece aşağıdaki kodu kullanmak böylece sonuç nesnesini JSON biçiminde yazdırmak istiyorum. Umarım içinde bir şey bulursun.

// 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 ve json_encode kullanmak için aşağıdaki kodu kontrol edin. Satırları yinelemeniz gerekecek, ancak mysqli kullanırsanız durum değişecektir

$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

Böyle çözdüm

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

Bu, sonuç kümesi olarak ve aşağıdaki gibi javascript bölümünde json ayrıştırma kullanılarak ajax'a döndürülür:

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

Kod:

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


-3

$sql = "SELECT JSON_ARRAYAGG(JSON_OBJECT('id', tbl.id)) FROM table tbl WHERE... "; 

//And get first row :) 

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.