PHP在MySQL中保存来自Javascript的对象"JSON.stringify"通过Ajax


PHP save in MySQL for the Object coming from Javascript "JSON.stringify" via Ajax?

我有一个对象从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并读取)

如果你只是想把它作为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));

在将其存储到db之前不需要解码它,(将其存储为纯字符串),然后如果您想要返回(在代码中的其他地方)获取该字符串并解码它

通过使用json_encode(),你可以将你的Array重新编码为JSON,可以存储到MySQL的TEXT字段中。或者,既然你已经有了它作为一个字符串,那就保持它不变。

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

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

try this

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