繁体   English   中英

php如何通过mysql存储和读取json数据?

[英]php how to store and read json data via mysql?

php如何通过mysql存储和读取json数据?

mysql_query("INSERT INTO text (data) VALUES (json_encode('id' => $uid, 'value' => yes))");

那么,如何更新data值呢? 读出数据,然后用 json_encode 和解码过程插入它,或者只是简单的方法更新?

[{"id": "1", "value": "yes"}]

然后插入另一个更改[{"id": "1", "value": "yes"},{"id": "2", "value": "yes"}] ...

或者即使很长很长的价值。

[{"id": "1", "value": "yes"},{"id": "2", "value": "yes"}...{"id": "10000", "value": "yes"}]

然后更新另一个,更改为[{"id": "1", "value": "yes"},{"id": "2", "value": "yes"}...{"id": "10000", "value": "yes"},{"id": "10001", "value": "yes"}]

我想问一下,如何更智能、更高效地进行这个mysql查询处理? 感谢您的更多建议。

从技术上讲,你这样做是错误的。 MySQL 用于单独存储您的每个 ID/VALUE。 为了不更改您的代码,我们将首先查看您的解决方案,然后我将解释“更好”的方法。

首先,您需要将 JSON 设为变量,而不是 SQL 的一部分:

mysql_query("INSERT INTO text (data) VALUES (".mysql_real_escape_string(array(json_encode('id' => $uid, 'value' => 'yes'))).")");

代替

mysql_query("INSERT INTO text (data) VALUES (json_encode('id' => $uid, 'value' => yes))");

第一部分将允许您至少将数据正确地导入 mysql。 我假设你的表有一个 ID,你将使用它来更新或删除

检索数据时,您可以对$row['data']进行json_decode以从行中取回数据并使用它。 要更新它,只需执行以下操作:

mysql_query("UPDATE text SET data = "'.mysql_real_escape_string(json_encode($myJsonToBeData)).'" WHERE rowid = '.$myrowid)

现在,对于执行此操作的正确方法:

执行此操作的正确方法是将这些字段放入您的表中:ID、JSONID、JSONVALUE 并改用此 SQL:

SELECT * FROM text WHERE id = $rowid
INSERT INTO text VALUES(NULL, $jsonid, $jsonvalue)
UPDATE text SET jsonid = $jsonid, jsondata = $jsondata

这是非常基本的,但它允许您在数据库中拥有任意数量的条目,使其可搜索、索引、可排序、可查询等......

是的,但是....WordPress 将其大量数据存储为编码的 JSON 字符串,例如用户功能。 将数组存储为离散的数据位可以避免对数据库进行多次读取,并允许您在一次读取中获得大量数据。 如果您从未看到需要 SELECT JSON 字符串的各个部分,我不明白为什么这样做是不可接受的。 MySQL 也必须这么认为,因为如果您愿意,它具有允许对 JSON 字符串中的各个字段进行 SELECT 的功能(请参阅 MySQL EXPLAIN 关键字)。 但是我确实同意,如果您要在一个字段上进行大量 SELECT,它应该有一个自己的。 这完全取决于您将如何使用数据。

您可以通过不将 JSON 存储在单个字段中,而是通过使用 JSON 对象的属性名称作为字段名称创建适当的 MySQL 表来更有效地执行此操作。

将数据的文本字符串编码表示存储在数据库中完全破坏了使用数据库的意义。

假设您想在 MySQL 中将 JSON 字符串存储为文本varchar数据类型,您可以简单地转义 JSON 字符串,如下所示:

收藏

$object = new stdClass();
$object->key_a = "Value A";
$object->key_b = "Value B";

$storable_json_string = trim( addslashes( json_encode( $object ) ) );

// `$storable_json_string` contains an ugly invalid JSON
mysqli_query( "INSERT INTO table_a (column_a) VALUES ('{$storable_json_string}')" );

// read from the database
$result = mysqli_query( "SELECT column_a FROM table_a" );
$row = $result->fetch_object();

// makeover the ugly invalid JSON into a machine readable valid JSON
$valid_json_string = substr( stripslashes( $row->column_a ), 1, -1 );
    
// makes the JSON as a PHP object
$readable_json_object = json_decode( $valid_json_string );

echo $readable_json_object->key_a;    // Value A

这可能不是那么安全,但至少这些应该给你一些垫脚石。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM