JSON kodlamak MySQL sonuçları

12 Cevap php

Nasıl mysql sorgu sonuçları ile json_encode işlevini kullanın, ben satırları arasında yineleme gerekiyor ya da ben sadece tüm sonuçları nesnesine uygulayabilirsiniz?

12 Cevap

http://www.php.net/mysql_query "mysql_query() bir kaynak verir" diyor.

http://www.php.net/json_encode o "bir kaynak dışında" herhangi bir değer kodlamak diyor.

Sen json_encode dizi daha sonra, bir dizi veritabanı sonuçları yineleme ve toplamak gerekir.

Bu deneyin, bu düzgün bir nesne yaratacak

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

 print json_encode($rows);

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

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

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

echo json_encode($rows);

The above will not work, in my experience, before you name the root-element in the array to something, I have not been able to access anything in the final json before that.

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

Yani hile yapmak gerekir!

Pär

Sayısal değerler etrafında konuşma işaretleri koyarak bunu durdurmak için benim basit bir düzeltme ...

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

Üzgünüz, bu sorudan sonra son derece uzun, ama:

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

Sadece temelde:

"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

FOR döngüsü 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ı için döngü, örneğin daha yavaş olduğunu sırasında ya özellikle foreach

$rows = json_decode($mysql_result,true);

O :-) kadar basit

For example $result = mysql_query("SELECT * FROM userprofiles where NAME='TESTUSER' ");

1..) If $ sonucu sadece bir satır olduğunu.

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

$ Sonuç birden fazla satır 2.) Eğer. Sen satırları yineleme ve bir dizi kaydetmek ve içinde bir dizi ile bir json dönmek gerekiyor.

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

Biz basitleştirmek olabilirmiş gibi Paolo Bergantino cevap

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

Bu çok eski bir soru olduğunu biliyorum. Ama kimse dizeleri olarak gösteren tamsayılar sorunu gidermekle basit alternatif gösterir. @ Mouckatron aşağıda cevap json_encode() in JSON_NUMERIC_CHECK bayrağını sunuyor. Basit ve bir cazibe gibi çalışır!

PHP json_encode encoding numbers as strings

Aşağıdaki kodu burada ç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);

>