การเก็บ JSON ใน MySQL ด้วย PHP

Ayuth Mangmesap
Ayuth’s Story
Published in
2 min readOct 27, 2017

--

https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/PHP-logo.svg/1200px-PHP-logo.svg.png

บล็อกนี้จะมาพูดถึงการ logging ลงใน Mysql นะครับแต่ว่า log ไม่ใช่ text ธรรมดาแต่มันจะเป็น JSON ซึ่งถ้าพูดถึง JSON แล้วถือว่าเป็น format ที่กลายเป็นมาตรฐานในการรับ-ส่งข้อมูลในปัจจุบันและน่าจะรองรับเกือบทุกภาษาแล้วตอนนี้

Mysql ก็ไม่น้อยหน้าเช่นกันเพราะตั้งแต่ MySQL 5.7.8 ได้ support native JSON แล้วหล่ะนายจ๋า

As of MySQL 5.7.8, MySQL supports a native JSON data type defined by RFC 7159 that enables efficient access to data in JSON (JavaScript Object Notation) documents. The JSON data type provides these advantages over storing JSON-format strings in a string column:

และประสิทธิภาพของมันก็น่าติดตามเหมือนกันครับ (ขอขอบคุณคุณพี่โจที่นำมาให้ดูด้วยครับ)

https://www.slideshare.net/morgo/mysql-57-json

ถ้าหากต้องการรายละเอียดเพิ่มเติมสามารถเข้าไปในลิงค์นี้ได้ครับ

เข้าเรื่องกันดีกว่า

ตี๊ต่างว่าเรามี PHP setup ไว้แล้วนะครับและมี MySQL ติดตั้งไว้อยู่แล้วนะครับซึ่งเวอร์ชันที่ผมใช้ทดสอบจะเป็น

  • PHP 7.0.6
  • MySQL 5.7.19

ขั้นแรกสร้างตารางขึ้นมาก่อนครับและเลือกตารางนั้น

mysql> CREATE DATABASE json_test;
Query OK, 1 row affected (0.00 sec)
mysql> USE json_test;
Database changed

หลังจากนั้นสร้าง table ขึ้นมา

mysql> CREATE TABLE users (data JSON); -- สร้าง field ชื่อ data มี type เป็น JSON
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW TABLES;
+---------------------+
| Tables_in_json_test |
+---------------------+
| users |
+---------------------+
1 row in set (0.00 sec)
mysql> DESCRIBE users;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| data | json | YES | | NULL | |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)

ลอง insert ด้วย PHP ดู

ถ้าลอง run script แล้วจะได้ข้อมูลใน table แบบนี้ครับ

การแปลง JSON จาก MySQL มาเป็นค่าที่สามารถใช้งานได้

ถ้าใน PHP จะใช้ function json_decode ในการแปลงกลับมาเป็น Object ครับเช่น

ในที่นี้การเข้าถึง $user จะใช้การ access class member แบบนี้เช่น

$user->firstname; // Mungmana
$user->lastname; // Mana

แต่ถ้าเราใส่ parameter ลำดับที่ 2 ของฟังก์ชัน json_decode เป็น true เราก็จะได้ array มาหนึ่งตัวแบบสวยงาม

$user = json_decode($row['data'], true);
// Array ( [lastname] => Mungmana [firstname] => Mana )

และการเข้าถึงก็จะเป็นการเข้าถึงแบบ array ธรรมดาเช่น

$user['firstname'];
$user['lastname'];

จะเห็นได้ว่าชีวิตง่ายขึ้นเยอะเลยครับและลองไปดูโค้ดอ่านง่าย ๆ กัน

--

--

Ayuth Mangmesap
Ayuth’s Story

A developer who runs everyday because he eats a lot