【问题标题】:PHP save in MySQL for the Object coming from Javascript "JSON.stringify" via Ajax?PHP在MySQL中保存来自Javascript“JSON.stringify”的对象通过Ajax?
【发布时间】:2014-06-12 12:21:25
【问题描述】:

我有一个从 Javascript 传递给 PHP 的对象(通过 AJAX):

var jsObject = {
    "name": "Michael Divo",
    "age": 27,
    "country": "United States"
};

jsObject_json = JSON.stringify( jsObject );

$.ajax({
    type: "POST",
    dataType: 'json',
    url: "http://www.example.com/myserver.php",
    data: { mydata: jsObject_json },
}) ...

在,myserver.php:

$json = json_decode($_POST["mydata"], true);

然后,如果我从这个 PHP 端将 $json 保存到 MySQL 中,它会保存为:

Array

.. 在数据库中,作为字符串的“数组”。


那么我该如何正确地将这个 JSON 保存到 MySQL 中?(这样我以后可以将它作为 JSON 检索回来并读取。)

【问题讨论】:

  • 使用serialize function 存储到数据库中。

标签: javascript php mysql ajax json


【解决方案1】:

如果您只想将其作为 JSON 拉回,则不要通过 json_decode 运行它。将其保留为字符串。

然而,大多数明智的系统都会有一个数据库结构,允许单独处理 JSON 提交中的每个字段。然后,您将访问每个字段并将其添加到 INSERT 查询中自己的列中。然后,您可以对“给我所有数据”以外的数据执行查询(例如WHERE country = 'United States')。

$preparedStatement = $db->prepare('INSERT INTO data (name, age, country) VALUES (:name, :age, :country)');
$preparedStatement->execute(json_decode($_POST["mydata"], true));

【讨论】:

    【解决方案2】:

    在将其存储到数据库之前,您不需要对其进行解码(将其存储为纯字符串),然后如果您要取回它(代码中的其他位置),则获取该字符串并对其进行解码。

    【讨论】:

      【解决方案3】:

      通过使用json_encode(),您可以将您的 Array 重新编码为 JSON,该 JSON 可以存储到 MySQL 中的 TEXT 字段中。或者,既然您已经将其作为字符串,请保持原样。

      $stmt = $db->prepare("INSERT INTO FOO (mydata) VALUES (:my_data)");
      $stmt->execute($_POST);
      

      【讨论】:

        【解决方案4】:

        由于此处未提供您的数据库架构,因此假设您只需要存储字符串,在这种情况下不要解码您的 json,因为这会将 json 字符串转换为数组。如果您有架构,那么您可以继续将其解码为数组,然后根据您的表架构保存元素。

        【讨论】:

          【解决方案5】:

          试试这个

          $str = $db->prepare("INSERT INTO table (json_array) VALUES (:json_data)");
          $str->execute($_POST["mydata"]);
          

          【讨论】:

          • 危险:你容易受到SQL injection attacks的影响,你需要defend自己。
          • @Quentin 现在一切正常
          • 除了实际上没有在查询中放置任何占位符
          • 对不起@Quentin 我不是 php 开发人员,所以我对 PHP 一无所知,但我再次编辑我的答案。如果我的答案有问题,请纠正它。
          • 现在你又容易受到 SQL 注入攻击了。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-09
          • 2013-04-23
          • 2011-08-26
          相关资源
          最近更新 更多