使用php读取Json数据但不插入mysql

使用php读取Json数据但不插入mysql,php,json,Php,Json,我正在尝试使用php将json数据插入mysql 我收到成功消息,但未插入任何记录 我的json数据是: jsondata.json: {"users": { "bert":6.44, "earnie":0.25, "bigbird":34.45 }} 我的php代码: <?php //First: read data $fo=fopen("data.json","r"); $fr=fread($fo,filesize("data.json")); $array=json_decode(

我正在尝试使用php将json数据插入mysql

我收到成功消息,但未插入任何记录

我的json数据是:

jsondata.json:

{"users": { "bert":6.44, "earnie":0.25, "bigbird":34.45 }}
我的php代码:

<?php
//First: read data
$fo=fopen("data.json","r");
$fr=fread($fo,filesize("data.json"));
$array=json_decode($fr,true);
//Second: create $values
$rows = array();
foreach ($array['users'] as $key => $value)
$rows[] = "('" . $key . "', '" . $value . "')";
$values = implode(",", $rows);


 //To display all values from JSON file
 echo '<pre>';print_r($array);
//Save to DB
$hostname = 'localhost';                 
$username = 'root';
$password = '';

try 
{
$dbh = new PDO("mysql:host=$hostname;dbname=nodejs", $username, $password);
echo 'Connected to database<br />';
//$count = $dbh->exec("INSERT INTO USERSAMOUNTS(USERNAME, AMOUNT) VALUES " . $values) or die(print_r($dbh->errorInfo(), true)); 
$count = $dbh->exec("INSERT INTO json(firstName) VALUES " . $values) or die(print_r($dbh->errorInfo(), true)); 
echo $count;// echo the number of affected rows
$dbh = null;// close the database connection
echo 'Success<br />';
}
catch(PDOException $e)
{
  echo $e->getMessage();
}
?>

我认为问题可能在于操作的执行顺序

$dbh = new PDO("mysql:host=$hostname;dbname=nodejs", $username, $password);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$count = $dbh->exec("INSERT INTO USERAMOUNTS(USERNAME, AMOUNT) VALUES " . $values);

启用或禁用对已准备语句的模拟。某些驱动程序不支持本机编写的语句,或对它们的支持有限。有关更多信息,请检查-


希望这有帮助。

问题在于您如何尝试插入数据。我很惊讶你没有出错


你应该使用事先准备好的陈述。请参阅以下内容

这里有些东西很时髦

起初,看起来您希望数据神奇地来自$data(除非它在某处传递?)

然后,看起来您正在打开一个文件并解析JSON(但没有使用$rows[]执行上述神奇操作)

为什么不在for each循环上插入


echo“插入USERAMOUNTS(用户名、金额)值”$价值观并尝试直接在mysql中运行它;这可以工作并且正在插入,而且似乎计数值是1 echo$count;此字段的数据类型是什么
USERNAME,AMOUNT
?并尝试使用
$dbh->exec(“插入USERAMOUNTS(USERNAME,AMOUNT)值”。$VALUES)或die(print_r($dbh->errorInfo(),true))调试错误
USERNAME为varchar,AMOUNT为int,对于debug i get Array([0]=>42000[1]=>1064[2]=>您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第1行“Array”附近使用的正确语法)已更新了答案,现在插入,以及如何相应地更改列值,列计数与第1行的值计数不匹配
$dbh = new PDO("mysql:host=$hostname;dbname=nodejs", $username, $password);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$count = $dbh->exec("INSERT INTO USERAMOUNTS(USERNAME, AMOUNT) VALUES " . $values);
$array = json_decode($data, true);
$rows = array();                                   
foreach($array['users'] as $key => $value)                         
$rows[] = "('" . $key . "', '" . $value . "')"; 
$values = implode(",", $rows);
$fo=fopen("jsondata.json","r");
$fr=fread($fo,filesize("jsondata.json"));
$array=json_decode($fr,true);
$fo=fopen("jsondata.json","r");
$fr=fread($fo,filesize("jsondata.json"));
$array=json_decode($fr,true);
$count = 0;
$dbh = new PDO("mysql:host=$hostname;dbname=nodejs", $username, $password);

try {
    foreach($array['users'] as $key => $value) 
    $count = $count + $dbh->exec("INSERT INTO USERAMOUNTS(USERNAME, AMOUNT) VALUES " . $key . " " . $value . ")";

 } catch ...