簡體   English   中英

讀取JSON數據但未使用PHP插入MySQL

[英]Json data getting read but not inserting into mysql using php

我正在嘗試使用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();
}
?>

我認為問題可能出在執行動作的順序上。

<?php

//First: read data
$fo = fopen("jsondata.json", "r");
$fr = fread($fo, filesize("jsondata.json"));
$array = json_decode($fr, true);

//Second: create $values
$rows = array();
foreach ($array['users'] as $key => $value)
    $rows[] = "('" . $key . "', '" . $value . "')";
$values = implode(",", $rows);

//Third: display
echo '<pre>';
print_r($array);

//Fourth: save to db
$hostname = 'localhost';
$username = 'root';
$password = '';

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=nodejs", $username, $password);
    echo 'Connected to database<br />'; // echo a message saying we have connected 
    $count = $dbh->exec("INSERT INTO USERAMOUNTS(USERNAME, AMOUNT) VALUES " . $values);
    echo $count; // echo the number of affected rows
    $dbh = null; // close the database connection
    echo 'Success<br />';
} catch (PDOException $e) {
    echo $e->getMessage();
}
?>

啟用或禁用對准備好的語句的仿真。 一些驅動程序不支持本機准備的語句或對它們的支持有限,以獲取更多信息,請檢查-http://php.net/manual/en/pdo.setattribute.php

$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);

希望能有所幫助。

問題在於您如何嘗試插入數據。 我很驚訝您沒有出錯。

您應該使用准備好的語句。 請參閱以下內容... https://stackoverflow.com/a/4629088/2033178

這里有些東西很時髦。

乍一看,您似乎希望數據神奇地來自$ data(除非它傳遞到某個地方?)

$array = json_decode($data, true);
$rows = array();                                   
foreach($array['users'] as $key => $value)                         
$rows[] = "('" . $key . "', '" . $value . "')"; 
$values = implode(",", $rows);

然后,看起來您正在打開文件並解析JSON(但不能用$ rows []做上述魔術)

$fo=fopen("jsondata.json","r");
$fr=fread($fo,filesize("jsondata.json"));
$array=json_decode($fr,true);

為什么不在for每個循環中插入?

$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 ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM