gpt4 book ai didi

php - JSON 到 MySQL 表

转载 作者:行者123 更新时间:2023-11-29 07:52:26 24 4
gpt4 key购买 nike

我有一个 JSON 文件,其中包含另一个程序的数据输出,我正在尝试将此数据导入到 MySQL 表中,但存在以下两个问题。

  1. 数据永远不会放入表中,也不会返回任何错误,当我回显输出并将其手动输入数据库时​​,它工作正常。

  2. 当输出到 sql 导入字符串(值)所需的数组时,数据会从 JSON 值发生变化。

JSON:

{
"version" : 90200,
"protocolversion" : 70002,
"blocks" : 322877,
"timeoffset" : -1,
"connections" : 49,
"proxy" : "",
"difficulty" : 34661425923.97693634,
"testnet" : false,
"relayfee" : 0.00001000,
"errors" : ""
}

PHP:

<?php
$data = file_get_contents("data.json");
$array = json_decode($data, true);
$keys = array_keys($array);
$rows = array();
foreach($keys as $key) {
$value = $array[$key];
$rows[] = "'" . $value . "'";
}
echo $rows;
$values = implode(",", $rows);

$hostname = 'localhost';
$username = 'username';
$password = 'password';
$database = 'database';
try
{
$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);

if($dbh)
echo 'Connected to database'; // echo a message saying we have connected

$datetime = date("Y-m-d H:i:s");
$count = $dbh->exec("INSERT INTO getinfo VALUES ('','" . $datetime . "'," . $values . "");
echo "Going into DB: ('','" . $datetime . "'," . $values . ")";
echo $count;// echo the number of affected rows
$dbh = null;// close the database connection
}
catch(PDOException $e)
{
print_r($e);
}
?>

信息回显并作为值发送:

('','2014-09-28 16:11:33','90200','70002','322880','-1','49','','34661425923.977','','1.0E-5','')

前两个值是我为 ID 和日期/时间创建的手动条目

正如您所看到的,输出与输入不同,但是这些值适用于手动 INSERT 查询,但也不能通过此脚本(因此存在两个问题)。

最佳答案

为了确保我没有错过任何内容,以下是我注意到的差异:

| Name       | Actual Imploded | Expected             |
| blocks | 322880 | 322877 |
| difficulty | 34661425923.977 | 34661425923.97693634 |
| relayfee | 1.0E-5 | 0.00001000 |
| testnet | '' | false |

要保留数字数据的精度,您可以尝试将 JSON 解码位掩码选项设置为 JSON_BIGINT_AS_STRING像这样:

json_decode($data, true, 512, JSON_BIGINT_AS_STRING);

对于testnet的值,尝试使用var_dump()而不是print_r()打印$values >(如果这就是您一直在使用的)。 print_r() doesn't show type ; false 将显示为空字符串。

最后,不太确定为什么你的 SQL 插入不起作用,但尝试将 PDO 的默认错误模式更改为 PDO::ERRMODE_EXCEPTION 以便任何数据库错误都会作为异常抛出,以确保您确实没有错过任何数据库错误。

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

顺便说一句,您应该考虑使用 prepare statements .

更新

要处理不支持 JSON_BIGINT_AS_STRING 的早期 PHP 版本,请尝试以下操作之一:

  1. 使用 preg_replace 为整数添加引号:preg_replace('/("\w+"):(\d+(\.\d+)?)/',\\1: “\\2”',$data)
  2. 通过向您的 PHP 应用添加 ini_set(' precision', 20); 或通过更改 precision = 20 更新您的 php.ini 来提高 PHP 精度
  3. 使用ServiceJSON像这样:
$json = new ServicesJSON();
$var = $json->decode($data);

关于php - JSON 到 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26081908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com