Cara menggunakan mysql json encode function

We shouldn't see any use of mysql_ functions in modern applications, so either use

exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));  // 2-dimensional / array of rows
0 or pdo functions.

Explicitly calling

exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));  // 2-dimensional / array of rows
1 before outputting your data payload is considered to be best practice by some devs. This is usually not a requirement, but clarifies the format of the payload to whatever might be receiving it.

Assuming this is the only data being printed, it is safe to print the json string using

exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));  // 2-dimensional / array of rows
2 which will terminate the execution of the script as well. This, again, is not essential because
exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));  // 2-dimensional / array of rows
3 will work just as well, but some devs consider it a good practice to explicitly terminate the script.


MySQLi single-row result set from query result set object:

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

MySQLi multi-row result set from query result set object:

Prior to PHP 8.1.0, available only with mysqlnd.

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

MySQLi single-row result set from prepared statement:

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

MySQLi multi-row result set from prepared statement:

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

PDO single-row result set from query result set object:

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

PDO multi-row result set from query result set object:

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

PDO single-row result set from prepared statement:

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

PDO multi-row result set from prepared statement:

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

Obey these rules to prevent the possibility of generating invalid json.:

  1. you should only call
    exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));  // 2-dimensional / array of rows
    
    4 after you are completely finished manipulating your result array and
  2. you should always use
    exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));  // 2-dimensional / array of rows
    
    4 to encode the payload (avoid the urge to manually craft a json string using other string functions or concatenation).

If you need to iterate your result set data to run php functions or provide functionality that your database language doesn't offer, then you can immediately iterate the result set object with

exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));  // 2-dimensional / array of rows
6 and access values using array syntax -- e.g.

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

If you are calling

exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));  // 2-dimensional / array of rows
4 on your data payload, then it won't make any difference to whether the payload is an array of arrays or an array of objects. The json string that is created will have identical syntax.


You do not need to explicitly close the database connection after you are finished with the connection. When your script terminates, the connection will be closed for you automatically.

Pembahasan tutorial kali ini merupakan kebalikan dari tutorial sebelumnya. Tutorial ini akan membahas bagaimana membuat script PHP untuk mengenerate data format JSON yang berasal dari database MySQL/MariaDB.

Studi kasus yang akan dipilih, masih sama dengan sebelumnya yaitu menggunakan data kota-kota yang ada di Inggris.

Misalkan kita memiliki sebuah tabel dengan nama ‘zip’ di MySQL/MariaDB sebagai berikut:

Cara menggunakan mysql json encode function
Isi tabel data MySQL/MariaDB kota/daerah di Inggris

Dari data di atas, kita akan mengenerate data format JSON dengan struktur setiap record datanya sebagai berikut:

Cara menggunakan mysql json encode function
Contoh format struktur JSON dari sebuah record data kota “AGAWAM”

Ide dasar untuk mengenerate data JSON dari MySQL/MariaDB adalah sebagai berikut:

  1. Membaca semua record data dari tabel database melalui sebuah query
  2. Untuk setiap recordnya, dibuat struktur array asosiatif menyesuaikan dengan format JSON yang dikehendaki.
  3. Selanjutnya array asosiatif yang dihasilkan dilakukan encode JSON untuk menghasilkan format JSON
  4. Tampilkan JSON ke web

Dalam hal ini langkah 2, 3, dan 4 dilakukan terus menerus untuk semua record data yang terbaca dari database.

Catatan: Array asosiatif adalah array yang elemennya berbentuk pasangan key dan value. Dengan demikian index dari array asosiatif ini tidak lain adalah key itu sendiri. Misalnya: $x = array(“key1”: value1, “key2”: value2, …)

Implementasi dari ide dasar di atas ke dalam script PHP adalah seperti di bawah ini.

<?php

// parameter koneksi ke MySQL
$dbhost = "localhost";
$dbuser = "...";
$dbpass = "...";
$dbname = "...";

// koneksi ke mysql
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

// query untuk membaca semua data record
$query = "SELECT * FROM zip";
// jalankan query
$result = mysqli_query($conn, $query);

// proses looping untuk setiap data hasil query
while ($data = mysqli_fetch_assoc($result)){
	// membuat array asosiatif untuk setiap data
	$item = array("id" => $data['id'],
                      "city" => $data['city'],
                      "loc" => array(doubleval($data['lat']), doubleval($data['long'])),
                      "pop" => intval($data['pop']),
                      "state" => $data['state']);
	// proses encode array asosiatif ke json
	// lalu tampilkan 
	echo json_encode($item)."\n";
}

// tutup koneksi
mysqli_close($conn);
?>

Struktur array asosiatif yang menjadi acuan untuk membuat JSON adalah seperti berikut ini

$item = array("id" => $data['id'], 
              "city" => $data['city'],
              "loc" => array(doubleval($data['lat']), doubleval($data['long'])),
              "pop" => intval($data['pop']),
              "state" => $data['state']);

Dalam hal ini, pemberian nama key dari array asosiatif tersebut nantinya akan menjadi key dari JSON nya.

Khusus untuk key ‘loc’ (location), disini valuenya merupakan array yang elemennya merupakan gabungan dari latitude dan longitude.

Adapun function doubleval() digunakan untuk mengubah data string menjadi double. Hal ini dilakukan karena secara default tipe data hasil query select table di PHP adalah string. Demikian pula function intval(), yaitu berguna untuk mengubah tipe data string menjadi integer.

Apabila script PHP di atas dijalankan, maka akan dihasilkan tampilan halaman berisi JSON seperti di bawah ini.