第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

通過 CSV 導(dǎo)出/導(dǎo)入 mysql json 對象

通過 CSV 導(dǎo)出/導(dǎo)入 mysql json 對象

PHP
慕尼黑5688855 2023-04-15 10:40:46
我正在使用一對 PHP 腳本。一個(gè)腳本從 MYSQL 數(shù)據(jù)庫讀取數(shù)據(jù)并將其導(dǎo)出到 csv 文件,然后第二個(gè)腳本使用 csv 將導(dǎo)出的 csv 文件上傳到另一個(gè) MySQL 數(shù)據(jù)庫實(shí)例。數(shù)據(jù)庫表 A(導(dǎo)出)和 B(導(dǎo)入)的結(jié)構(gòu)相同。這些腳本適用于“普通”MySQL 表和列類型。但是,當(dāng)我們將它們應(yīng)用于在其中一個(gè)列(MySQL 列類型為“json”)中存儲 JSON 對象的 MySQL 表時(shí),導(dǎo)入失敗。導(dǎo)出數(shù)據(jù)的腳本按預(yù)期工作,生成一個(gè) CSV 文件,其中 JSON 對象被雙引號括起來……就像行中的其他值一樣。導(dǎo)出的 CSV 文件中的行如下所示(最后一項(xiàng)是復(fù)雜的 json 對象,為簡單起見縮寫):"894","Somebody","Related","2020-02-20","{"name1":"value1","name2":"value2","name3":"value3"}","expired"在導(dǎo)出數(shù)據(jù)的 PHP 腳本中,它本質(zhì)上是這樣的:$rowStr =   "894","Somebody","Related","2020-02-20","{"name1":"value1","name2":"value2","name3":"value3"}","expired";file_put_contents($filepath, trim($rowStr), FILE_APPEND);導(dǎo)出沒有問題。行按預(yù)期出現(xiàn)在 CSV 文件中(與上述格式相同)。我將 csv 讀入另一個(gè)數(shù)據(jù)庫的代碼如下所示:    $allRows = array_map('str_getcsv',file($fp)); // read the exported csv file where $fp is the path to the file    foreach($allRows as $i => $row) {        //get the col_names from the 2nd database table (identical to the first) where $ac-> is the class that handles data queries        $col_names = $ac->get_table_column_names('databasename',$tablename);        $update_arr = array();        foreach($col_names as $i => $cname) {            $update_arr[$cname['COLUMN_NAME']] = $val;                      }        //and write the row to the 2nd db's table        $ac->create_update_table($update_arr,$tablename,FALSE);   }而且,如果重要的話,這里是“get_table_column_names”和“create_update_table”函數(shù)中使用的查詢:get_table_column_names //使用PDOSELECT COLUMN_NAME,COLUMN_DEFAULT,DATA_TYPE FROM information_schema.columns WHERE table_schema = :db AND table_name = :table創(chuàng)建更新表INSERT INTO 'tablename' (field1, field2, field3, field4,json_object_column) VALUES ("894","Somebody","Related","2020-02-20","{"name1":"value1","name2":"value2","name3":"value3"}")發(fā)生的事情是 JSON 對象中的“,”被視為字段分隔符,并且 JSON 被分解為數(shù)組節(jié)點(diǎn)。除了編寫腳本來檢測以“{ 和 } 結(jié)尾的字段”之外,我如何將整個(gè) json 字符串作為一個(gè)字段讀?。ㄒ?yàn)樗跀?shù)據(jù)庫中)?或者,也許有更好的方法來輸出字符串,以便可以將其作為一個(gè)項(xiàng)目讀?。?
查看完整描述

2 回答

?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊

如果不是僅僅使用像file_put_contents()你這樣的東西寫出數(shù)據(jù),而是使用一些為 CSV 文件設(shè)計(jì)的方法,這將為你完成大部分工作......


要寫入數(shù)據(jù)使用fputcsv(),這會轉(zhuǎn)義分隔符(在這種情況下,“變?yōu)椤保?..


$row = ["894","Somebody","Related","2020-02-20",'{"name1":"value1","name2":"value2","name3":"value3"}',"expired"];


$fh = fopen($filepath, "a");

fputcsv($fh, $row);

fclose($fh);

這將寫入文件


894,Somebody,Related,2020-02-20,"{""name1"":""value1"",""name2"":""value2"",""name3"":""value3""}",expired

然后從文件中讀取,一次只讀一行并使用fgetcsv()...


$fh = fopen($filepath, "r");

print_r(fgetcsv($fh));   // This in a loop to read all lines

fclose($fh);

這表明


Array

(

    [0] => 894

    [1] => Somebody

    [2] => Related

    [3] => 2020-02-20

    [4] => {"name1":"value1","name2":"value2","name3":"value3"}

    [5] => expired

)


查看完整回答
反對 回復(fù) 2023-04-15
?
Smart貓小萌

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊

解決此問題的一種方法是創(chuàng)建數(shù)組的新副本并操作新數(shù)組并將 json 添加為原始數(shù)組的切片部分。


$allRows = array_map('str_getcsv',file($fp)); 


$new_arr = [];

foreach($allRows[0] as $key=>$item) {


    $json = false;


    if (substr($item,0,1) == '{') {

        $json_start = $key;

        $json = true;

    }


    if (substr($item,-2,2) == '}"') {

        $json_stop = $key;

        $json = true;


        //Slice json-part from original array (in your case 4,5,6)

        $sl = array_slice($allRows[0], $json_start, ($json_stop-$json_start)+1);


        //Add the sliced part into key where json started

        $new_arr[$json_start] = implode('',$sl);         

    }


    if ($json === false) $new_arr[] = $item;

}

然后你在$new_arr.


查看完整回答
反對 回復(fù) 2023-04-15
  • 2 回答
  • 0 關(guān)注
  • 218 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號