জেএসওএন মাইএসকিউএল ফলাফলগুলি এনকোড করেছে


304

আমি কীভাবে json_encode()মাইএসকিউএল ক্যোয়ারী ফলাফলগুলি ব্যবহার করব? আমার কি সারিগুলির মধ্য দিয়ে পুনরাবৃত্তি করতে হবে বা আমি কেবল এটি পুরো ফলাফলের অবজেক্টে প্রয়োগ করতে পারি?


1
আমি জানি এটি খুব পুরানো প্রশ্ন। তবে স্ট্রিং হিসাবে দেখানো পূর্ণসংখ্যার সমস্যা সমাধানের সহজ বিকল্প কেউ দেখায় না। @ মৌকাট্রন 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_encodeপিএইচপি> = 5.2 এবং পিএইচপি-জেসন প্যাকেজ দরকার

দ্রষ্টব্য : mysqlপিএইচপি 5.5.0 হিসাবে অবহিত করা হয়েছে, mysqliপরিবর্তে এক্সটেনশনটি ব্যবহার করুন http://php.net/manual/en/migration55.deprecated.php


69
আমি আপনার হিসাবে পরামর্শ হিসাবে পরামর্শ করতে চাই যে ASজনসাধারণের জন্য কলামগুলির নাম পরিবর্তন করতে যেমন নির্বাচিত ক্যোয়ারির সময় ব্যবহার করার জন্য যেমন SELECT blog_title as titleএটি ক্লিনার এবং জনগণ জানেন না যে ডাটাবেস থেকে সঠিক কলামগুলি কী।
রবার্টপিট

14
এই কোডটি ভুলভাবে সমস্ত সংখ্যার মানকে স্ট্রিং হিসাবে এনকোড করে। উদাহরণস্বরূপ, স্কোর নামক একটি মাইএসকিউএল সংখ্যাসূচক ক্ষেত্রের 12 এর পরিবর্তে "12" এর JSON মান হবে (উদ্ধৃতিগুলি লক্ষ্য করুন)।
থিও

24
@ রবার্টপিট, আপনার কলামগুলির নাম গোপনের উপর ভিত্তি করে সুরক্ষাটি অস্পষ্টতার দ্বারা সুরক্ষা !
টিএমএস 21

4
@ টমাস সত্য, তবে সঠিক কলামের নামগুলি জেনে এসকিউএল ইঞ্জেকশন আক্রমণগুলি যথেষ্ট সহজ করে তোলে
টিম সেগুইন

16
@ টিম: আপনি যদি এমন পর্যায়ে পৌঁছে যাচ্ছেন যে আপনার কলামের নামগুলি জানা হয়ে গেছে আপনি ইতিমধ্যে হারিয়ে যাওয়া এসকিউএল ইঞ্জেকশনের একমাত্র বাধা, না?
পাওলো বার্গান্টিনো 15

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 * এর জন্য এটি।
অ্যান্ডি

হুম ... হ্যাঁ ... মাইএসকিএল_কোয়ারি এবং জসন_কোডের মধ্যে পুনরাবৃত্তির ক্ষেত্রে এটিই ঘটে। শুভ ডাক, ওয়াটসন
হিউ বোথওয়েল

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

উপরেরগুলি কাজ করবে না, আমার অভিজ্ঞতা অনুসারে, আপনি অ্যারেতে মূল-উপাদানটির নাম দেওয়ার আগে, আমি তার আগে চূড়ান্ত জসনে কোনও কিছুই অ্যাক্সেস করতে পারিনি।

$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 = 'পরীক্ষক' ");

১) যদি $ ফলাফল কেবল একটি সারি হয়।

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

২) যদি $ ফলাফল একাধিক সারির হয়। আপনাকে সারিগুলি পুনরাবৃত্তি করতে হবে এবং এটিকে একটি অ্যারেতে সংরক্ষণ করতে হবে এবং এতে অ্যারে সহ একটি জসন ফিরিয়ে দিতে হবে।

$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 ব্যবহারের জন্য নীচের কোডটি চেক করুন। আপনাকে সারিগুলির মধ্য দিয়ে পুনরাবৃত্তি করতে হবে তবে আপনি যদি মাইসকলি ব্যবহার করেন তবে পরিস্থিতি পরিবর্তন হবে

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

ফলস্বরূপ সেট হিসাবে এবং জাভাস্ক্রিপ্ট অংশে এই জাতীয় জেসন পার্স ব্যবহার করে এটি আজাক্সে ফিরে আসবে:

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.