JSON ने MySQL परिणामों को एनकोड किया


304

मैं json_encode()MySQL क्वेरी परिणामों के साथ फ़ंक्शन का उपयोग कैसे करूं ? क्या मुझे पंक्तियों के माध्यम से पुनरावृति करने की आवश्यकता है या क्या मैं इसे पूरे परिणाम ऑब्जेक्ट पर लागू कर सकता हूं?


1
मुझे पता है कि यह एक बहुत पुराना सवाल है। लेकिन किसी को स्ट्रिंग्स के रूप में दिखाने वाले पूर्णांक की समस्या को ठीक करने का सबसे सरल विकल्प नहीं दिखता है। @mouckatron json_encode()नीचे दिए गए उत्तर में JSON_NUMERIC_CHECK ध्वज प्रदान करता है । सरल और यह एक आकर्षण की तरह काम करता है! stackoverflow.com/questions/1390983/…
एलेक्सजीएम

1
स्ट्रिंग-प्रकार-समस्या के संबंध में एक मिलान प्रश्न + उत्तर है: stackoverflow.com/questions/28261613/…
Marcel Ennix

जवाबों:


493
$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 पैकेज की आवश्यकता है - जैसा कि यहां बताया गया है

नोट : mysqlPHP 5.5.0 के रूप में पदावनत किया गया है, mysqliइसके बजाय http://php.net/manual/en/migration55.deprecated.php एक्सटेंशन का उपयोग करें


69
मैं आपको सलाह देना चाहूंगा कि यह बताने के लिए कि चयनित ASकॉलम के दौरान सार्वजनिक रूप से किसी चीज़ के लिए कॉलम का नाम बदलने के लिए उपयोग करें SELECT blog_title as title, यह क्लीनर है और जनता को यह नहीं पता है कि डेटाबेस से सटीक कॉलम क्या हैं।
रॉबर्टपिट

14
यह कोड ग़लती से सभी संख्यात्मक मानों को स्ट्रिंग के रूप में एन्कोड करता है। उदाहरण के लिए, एक mySQL सांख्यिक क्षेत्र जिसे स्कोर कहा जाता है, 12 के बजाय "12" का JSON मान होगा (उद्धरण चिह्नों पर)।
थियो

24
@RobertPitt, आपके कॉलम के नाम छिपाने पर आधारित सुरक्षा अस्पष्टता से सुरक्षा है !
TMS

4
@ टोमास सच है, लेकिन सटीक कॉलम नामों को जानने से एसक्यूएल इंजेक्शन के हमले काफी आसान हो जाते हैं
टिम सेगिन

16
@ समय: यदि आप उस बिंदु पर पहुंच रहे हैं, जहां आपके कॉलम नामों को जाना जा रहा है, तो आप केवल खो चुके एसक्यूएल इंजेक्शन के लिए एकमात्र बाधा हैं, नहीं?
पाओलो बरगिनिनो

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 प्रदान करता है ।
प्रतिबंध-जियोइंजीनियरिंग

हां, यह उदाहरण प्रति पंक्ति एक कुंजी देता है।
मार

26

http://www.php.net/mysql_query कहता है " mysql_query()एक संसाधन लौटाता है"।

http://www.php.net/json_encode का कहना है कि यह "किसी संसाधन को छोड़कर" किसी भी मूल्य को एन्कोड कर सकता है।

आपको किसी सरणी में डेटाबेस परिणाम के माध्यम से पुनरावृति करने और इकट्ठा करने की आवश्यकता है, फिर json_encodeसरणी।


2
mysql_query एक परिणाम सेट नहीं लौटाता है। यही mysql_fetch * के लिए है।
एंडी

उम ... हाँ ... वही जो पुनरावृति में जाता है, mysql_query और json_encode के बीच। अच्छी कॉल, वाटसन।
ह्यूग बोथवेल

17

धन्यवाद इससे मुझे बहुत मदद मिली। मेरा कोड:

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

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

echo json_encode($rows);

यह एक, हमें एक सरणी युक्त देगा; 1) एक खाली वर्ग ब्रैकेट 2) इसके बाद घुंघराले ब्रैकेट के साथ हमारे लौटे परिणाम पंक्तियाँ हैं जो दूसरे से यह भिन्न है?
गमरू

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

उपरोक्त मेरे अनुभव में काम नहीं करेगा, इससे पहले कि आप कुछ में सरणी में रूट-एलिमेंट का नाम दें, मैं इससे पहले अंतिम जसन में कुछ भी एक्सेस नहीं कर पाया हूं।

$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
एग्जिऑल

4

हम पाओलो बर्गेनिनो को इस तरह जवाब दे सकते हैं

$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 ($ पंक्तियाँ, $ row_array); सरणी बनाने में मदद करें अन्यथा यह लूप में अंतिम मान देता है

जावा में StringBuilder के परिशिष्ट विधि की तरह यह काम


3

लूप के लिए एक और विकल्प:

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

एकमात्र नुकसान यह है कि इसके लिए लूप धीमा है, उदाहरण के लिए, जबकि विशेष रूप से फॉरच


3

उदाहरण के लिए $ परिणाम = mysql_query ("उपयोगकर्ता से चयन करें * जहां NAME = 'TESTUSER'");

1.) यदि $ परिणाम केवल एक पंक्ति है।

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

2.) यदि $ परिणाम एक पंक्ति से अधिक है। आपको पंक्तियों को पुनरावृत्त करने और इसे एक सरणी में सहेजने और इसमें एक सरणी के साथ एक जसन वापस करने की आवश्यकता है।

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

इसे परिणाम के रूप में अजाक्स में लौटा दिया जाएगा और इस तरह जावास्क्रिप्ट भाग में 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);


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.