PDA

View Full Version : ذخیره فایل json در دیتابیس mysql



png_92
چهارشنبه 26 خرداد 1395, 21:06 عصر
سلام
من ی فایل خیلی بزرگ از داده های جیسون دارم. که میخوام اونارو بریزم تو دیتابیس. برای این کار من از فیلدهای فایل ی جدول تو دیتابیس درست کردم.
میتونم با یسری توابع php اونو پارس کنم ولی نمیتونم داده هارو در دیتابیس ذخیره کنم. تقریبا خیلی سرچ کردم مخصوصا تو stackoverflow.می تونید راهنمایی کنید؟
این ی نمونه از فایل json منه :

[
{
"name": "The Adventurer",
"year": 1917,
"country": "USA",
"genreList": [
"Comedy",
"Short"
],
"durationMinutes": 24,
"director": "Charles Chaplin"
},
{
"name": "Mest kinematograficheskogo operatora",
"year": 1912,
"country": "Russia",
"genreList": [
"Animation",
"Short",
"Comedy"
],
"durationMinutes": 12,
"director": "Wladyslaw Starewicz"
},
{
"name": "Tillie Punctured Romance",
"year": 1914,
"country": "USA",
"genreList": [
"Comedy"
],
"durationMinutes": 82,
"director": "Mack Sennett"
}

H:Shojaei
پنج شنبه 27 خرداد 1395, 11:54 صبح
دقیقا با چه بخشیش مشکل دارید کدهایی که زدید رو اینجا بذارید...

png_92
پنج شنبه 27 خرداد 1395, 18:02 عصر
من دقیقا با جایی که باید فایلو خط به خط بخونم و در دیتابیس درج کنم مشکل دارم. خودم اینو برای فایلی که فقط یدونه رکورد داره نوشتم که کار نمیکنه:


public function insert_from_json() {

$filename = "info.json";
$json = file_get_contents($filename);
$result = json_decode($json);
$stmt = $this->conn->prepare("INSERT INTO film (name,year,country,durationMinutes,director)
VALUES ($result[0],$result[1],$result[2],$result[3],$result[4])");
$stmt->execute();
}




اینم برای فایلی که چندتا رکورد داره که اینم باز کار نمیکنه :





public function insert_from_json() {

$filename = "info.json";
$json = file_get_contents($filename);

foreach ($result as $key => $value) {
$value->name = $result[0];
$value->year = $result[1];
$value->country = $result[2];
$value->durationMinutes = $result[3];
$value->director = $result[4];
if ($value) {
$stmt = $this->conn->prepare("INSERT INTO film (name,year,country,durationMinutes,director) VALUES ($value->name, $value->year,$value->country,$value->durationMinutes,$value->director)");
$stmt->execute();
}
}
}




چطوری هر فیلد خوانده شده از فایلو بریزم تو جدول ؟
مرسی

H:Shojaei
پنج شنبه 27 خرداد 1395, 22:30 عصر
$json = '[
{
"name": "The Adventurer",
"year": 1917,
"country": "USA",
"genreList": [
"Comedy",
"Short"
],
"durationMinutes": 24,
"director": "Charles Chaplin"
},
{
"name": "Mest kinematograficheskogo operatora",
"year": 1912,
"country": "Russia",
"genreList": [
"Animation",
"Short",
"Comedy"
],
"durationMinutes": 12,
"director": "Wladyslaw Starewicz"
},
{
"name": "Tillie Punctured Romance",
"year": 1914,
"country": "USA",
"genreList": [
"Comedy"
],
"durationMinutes": 82,
"director": "Mack Sennett"
}
]';
$result=json_decode($json);
$vals='';
foreach ($result as $key => $value) {
// $value->name = $result[0];
// $value->year = $result[1];
// $value->country = $result[2];
// $value->durationMinutes = $result[3];
// $value->director = $result[4];
if ($value) {
$vals.="('$value->name','$value->year','$value->country','$value->durationMinutes','$value->director'),";
// $stmt->execute();
}
}
$vals=trim($vals,',');
echo "INSERT INTO film (name,year,country,durationMinutes,director) VALUES ($vals)";

H:Shojaei
پنج شنبه 27 خرداد 1395, 22:32 عصر
کوئری آخر رو که echo کردم رو اجراش کنید...

png_92
پنج شنبه 27 خرداد 1395, 23:27 عصر
ممنون
من قرار دادم کد شمارو :
اول اینکه من باید دیتارو از فایل بخونم ینی با این دستور :‌
$json = file_get_contents($filename);
ولی بدون درنظر گرفتن این نکته ینی دقیقا همین طوری که شما نوشتید:
کوئری آخر اجرا نشد ینی دیتا نرفت تو دیتابیس.
چه کنم؟

H:Shojaei
جمعه 28 خرداد 1395, 01:52 صبح
کوئری که تو صفحه نشون داده میشه رو بردارید ببرید توی phpmyadmin تو دیتابیس sql رو از تبها انتخاب کنید کوئری رو اونجا بذارید و رانش کنید... اگر خطا نداشت مشکل از دستورات ارتباط با دیتابیس خودتونه...

H:Shojaei
جمعه 28 خرداد 1395, 01:55 صبح
یه نکته هم اشتباه کردم من این رو به این صورت تغییر بدین:


echo "INSERT INTO film (name,year,country,durationMinutes,director) VALUES $vals";

png_92
جمعه 28 خرداد 1395, 05:15 صبح
من کد رو به این شکل تغییر دادم و درست شد:


<?php
public function insert_from_json() {

$filename = "/home/png/Desktop/info.json";
$json = file_get_contents($filename);
$result = json_decode($json);
$stmt = $this->conn->prepare("
INSERT INTO film (name, year, country, durationMinutes, director)
VALUES (:name, :year, :country, :durationMinutes, :director)");

foreach ($result as $r) {
$stmt->execute([
':name' => $r->name,
':year' => $r->year,
':country' => $r->country,
':durationMinutes' => $r->durationMinutes,
':director' => $r->director
]);
}
echo 'Insert Successfully';
}
?>



خیلی ممنون چون راهنماییتون خیلی مفید بود.