word_statistics.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. require_once "../../app/path.php";
  3. #打开源数据库
  4. $PDO_SRC = new PDO(_SRC_DB_STATISTICS_,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  5. $PDO_SRC->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  6. echo "open src".PHP_EOL;
  7. #打开目标数据库
  8. $PDO_DEST = new PDO(_FILE_DB_STATISTICS_,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  9. $PDO_DEST->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  10. echo "open dest".PHP_EOL;
  11. #删除目标数据库中所有数据
  12. $query = "DELETE FROM "._TABLE_WORD_STATISTICS_." WHERE true";
  13. $stmt = $PDO_DEST->prepare($query);
  14. if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
  15. $error = $PDO_DEST->errorInfo();
  16. echo "error - $error[2] ";
  17. exit;
  18. }
  19. $stmt->execute();
  20. echo "delete dest".PHP_EOL;
  21. // 开始一个事务,关闭自动提交
  22. $count = 0;
  23. echo "begin Transaction".PHP_EOL;
  24. $PDO_DEST->beginTransaction();
  25. $query = "INSERT INTO "._TABLE_WORD_STATISTICS_." ( bookid , word , count , base , end1 , end2 , type , length ) VALUES ( ? , ? , ? , ? , ? , ? , ? , ? )";
  26. $stmtDEST = $PDO_DEST->prepare($query);
  27. #从源数据库中读取
  28. $query = "SELECT * FROM "._SRC_TABLE_WORD_STATISTICS_." WHERE true ";
  29. $stmtSrc = $PDO_SRC->prepare($query);
  30. $stmtSrc->execute();
  31. while($srcData = $stmtSrc->fetch(PDO::FETCH_ASSOC)){
  32. #插入目标表
  33. $stmtDEST->execute(array(
  34. $srcData["bookid"],
  35. $srcData["word"],
  36. (int)$srcData["count"],
  37. $srcData["base"],
  38. $srcData["end1"],
  39. $srcData["end2"],
  40. (int)$srcData["type"],
  41. (int)$srcData["length"]
  42. ));
  43. if (!$stmtDEST || ($stmtDEST && $stmtDEST->errorCode() != 0)) {
  44. $error = $PDO_DEST->errorInfo();
  45. echo "error - $error[2] ";
  46. exit;
  47. }
  48. $count++;
  49. if($count%10000==0){
  50. echo "finished $count".PHP_EOL;
  51. }
  52. }
  53. // 提交更改
  54. $PDO_DEST->commit();
  55. echo "done".PHP_EOL;