2
0

db_insert_wordindex_from_csv_cli.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. /*
  3. 生成 巴利原文段落表
  4. */
  5. require_once __DIR__."/../config.php";
  6. set_exception_handler(function($e){
  7. fwrite(STDERR,"error-msg:".$e->getMessage().PHP_EOL);
  8. fwrite(STDERR,"error-file:".$e->getFile().PHP_EOL);
  9. fwrite(STDERR,"error-line:".$e->getLine().PHP_EOL);
  10. exit;
  11. });
  12. //PostgreSQL
  13. define("_DB_", _PG_DB_WORD_INDEX_);
  14. define("_TABLE_", _PG_TABLE_WORD_INDEX_);
  15. fwrite(STDOUT, "Insert Word Index To DB".PHP_EOL);
  16. $dirLog = _DIR_LOG_ . "/";
  17. $log = "";
  18. $dns = _DB_;
  19. $dbh_word_index = new PDO($dns, _DB_USERNAME_, _DB_PASSWORD_, array(PDO::ATTR_PERSISTENT => true));
  20. $dbh_word_index->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  21. #删除
  22. try{
  23. $query = "DELETE FROM "._TABLE_;
  24. $stmt = $dbh_word_index->prepare($query);
  25. $stmt->execute();
  26. }catch(PDOException $e){
  27. fwrite(STDERR,$e->getMessage());
  28. exit;
  29. }
  30. $scan = scandir(_DIR_CSV_PALI_CANON_WORD_INDEX_);
  31. foreach($scan as $filename) {
  32. $filename = _DIR_CSV_PALI_CANON_WORD_INDEX_."/".$filename;
  33. if (is_file($filename)) {
  34. fwrite(STDOUT, "doing ".$filename.PHP_EOL);
  35. if (($fpoutput = fopen($filename, "r")) !== false) {
  36. // 开始一个事务,关闭自动提交
  37. $dbh_word_index->beginTransaction();
  38. $query = "INSERT INTO "._TABLE_." (id , word , word_en , count , normal , bold , is_base , len , created_at,updated_at )
  39. VALUES ( ?, ?, ?, ?, ?, ?, ?, ? , now(), now())";
  40. try{
  41. $stmt = $dbh_word_index->prepare($query);
  42. }catch(PDOException $e){
  43. fwrite(STDERR,"error:".$e->getMessage()." At Line: ".$e->getLine().PHP_EOL);
  44. exit;
  45. }
  46. $count = 0;
  47. while (($data = fgetcsv($fpoutput, 0, ',')) !== false) {
  48. try{
  49. $stmt->execute($data);
  50. }catch(PDOException $e){
  51. fwrite(STDERR,"error:".$e->getMessage()." At Line: ".$e->getLine().PHP_EOL);
  52. fwrite(STDERR,"error-data:".implode(",",$data).PHP_EOL);
  53. fwrite(STDERR,"error-data-count:".count($data).PHP_EOL);
  54. exit;
  55. }
  56. $count++;
  57. }
  58. // 提交更改
  59. $dbh_word_index->commit();
  60. if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
  61. $error = $dbh_word_index->errorInfo();
  62. fwrite(STDERR, "error - $error[2]".PHP_EOL);
  63. $log .= "$filename, error, $error[2] \r\n";
  64. } else {
  65. fwrite(STDOUT, "updata $count recorders.".PHP_EOL);
  66. $log .= "updata $count recorders.\r\n";
  67. }
  68. }else{
  69. fwrite(STDERR, "open file error".PHP_EOL);
  70. }
  71. }
  72. }
  73. fwrite(STDOUT, "齐活!功德无量!all done!".PHP_EOL);
  74. ?>