function.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?php
  2. require_once "../public/function.php";
  3. require_once '../redis/function.php';
  4. function do_sync($param)
  5. {
  6. $output=array();
  7. $output["error"]=0;
  8. $output["message"]="";
  9. $output["data"]=array();
  10. $redis=redis_connect();
  11. if($redis){
  12. $key = $redis->hget("sync://key",$_POST["userid"]);
  13. if($key===FALSE){
  14. $output["error"]=1;
  15. $output["message"]="key验证失败";
  16. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  17. return false;
  18. }
  19. else{
  20. if($key!=$_POST["key"]){
  21. $output["error"]=1;
  22. $output["message"]="key验证失败";
  23. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  24. return false;
  25. }
  26. }
  27. }
  28. else{
  29. $output["error"]=1;
  30. $output["message"]="redis初始化失败";
  31. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  32. return false;
  33. }
  34. if (isset($_GET["op"])) {
  35. $op = $_GET["op"];
  36. } else if (isset($_POST["op"])) {
  37. $op = $_POST["op"];
  38. } else {
  39. $output["error"]=1;
  40. $output["message"]="无操作码";
  41. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  42. return false;
  43. }
  44. $PDO = new PDO("" . $param->database, "", "", array(PDO::ATTR_PERSISTENT => true));
  45. $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  46. switch ($op) {
  47. case "sync":
  48. {
  49. if(isset($_POST["size"])){
  50. $size=intval($_POST["size"]);
  51. }
  52. else{
  53. $size=0;
  54. }
  55. if($size>2000){
  56. $size=2000;
  57. }
  58. if(isset($_POST["time"])){
  59. $time = $_POST["time"];
  60. $query = "SELECT {$param->uuid} as guid, {$param->modify_time} as modify_time from {$param->table} where {$param->modify_time} > ? order by {$param->modify_time} ASC limit 0,".$size;
  61. $stmt = $PDO->prepare($query);
  62. $stmt->execute(array($time));
  63. $Fetch = $stmt->fetchAll(PDO::FETCH_ASSOC);
  64. if(count($Fetch)>0){
  65. $newTime = $Fetch[count($Fetch)-1]["modify_time"];
  66. $query = "SELECT {$param->uuid} as guid, {$param->modify_time} as modify_time from {$param->table} where {$param->modify_time} > ? and {$param->modify_time} <= ? order by {$param->modify_time} ASC ";
  67. $stmt = $PDO->prepare($query);
  68. $stmt->execute(array($time,$newTime));
  69. $Fetch = $stmt->fetchAll(PDO::FETCH_ASSOC);
  70. }
  71. $output["data"]=$Fetch;
  72. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  73. return;
  74. }
  75. else if(isset($_POST["id"])){
  76. $params = json_decode($_POST["id"],true);
  77. $count =count($params);
  78. /* 创建一个填充了和params相同数量占位符的字符串 */
  79. $place_holders = implode(',', array_fill(0, count($params), '?'));
  80. $query = "SELECT {$param->uuid} as guid, {$param->modify_time} from {$param->table} where {$param->uuid} in ($place_holders) limit 0,".$size;
  81. $stmt = $PDO->prepare($query);
  82. $stmt->execute($params);
  83. $Fetch = $stmt->fetchAll(PDO::FETCH_ASSOC);
  84. $iFetch = count($Fetch);
  85. $output["data"]=$Fetch;
  86. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  87. }
  88. break;
  89. }
  90. case "get":
  91. {
  92. if (isset($_GET["id"])) {
  93. $id = $_GET["id"];
  94. } else if (isset($_POST["id"])) {
  95. $id = $_POST["id"];
  96. } else {
  97. return (false);
  98. }
  99. $arrId = json_decode($id);
  100. /* 创建一个填充了和params相同数量占位符的字符串 */
  101. $place_holders = implode(',', array_fill(0, count($arrId), '?'));
  102. $query = "SELECT * FROM {$param->table} WHERE {$param->uuid} in ($place_holders)";
  103. $stmt = $PDO->prepare($query);
  104. $stmt->execute($arrId);
  105. $Fetch = $stmt->fetchAll(PDO::FETCH_ASSOC);
  106. $output["data"]=$Fetch;
  107. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  108. return (true);
  109. break;
  110. }
  111. case "insert":
  112. {
  113. echo "正在准备插入记录<br>";
  114. if (isset($_POST["data"])) {
  115. $data = $_POST["data"];
  116. } else {
  117. echo "没有数据<br>";
  118. return (false);
  119. }
  120. // 开始一个事务,关闭自动提交
  121. $PDO->beginTransaction();
  122. $query = "INSERT INTO {$param->table} (";
  123. foreach ($param->insert as $row) {
  124. $query .= "'" . $row . "',";
  125. }
  126. $query .= "'receive_time') VALUES ( ";
  127. for ($i = 0; $i < count($param->insert); $i++) {
  128. $query .= " ?, ";
  129. }
  130. $query .= " ? )";
  131. $arrData = json_decode($data, true);
  132. $stmt = $PDO->prepare($query);
  133. foreach ($arrData as $oneParam) {
  134. $newRow = array();
  135. foreach ($param->insert as $row) {
  136. $newRow[] = $oneParam["{$row}"];
  137. }
  138. $newRow[] = mTime();
  139. $stmt->execute($newRow);
  140. }
  141. // 提交更改
  142. $PDO->commit();
  143. if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
  144. $error = $PDO->errorInfo();
  145. $output["error"]=1;
  146. $output["message"]="error - $error[2] <br>";
  147. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  148. return (false);
  149. } else {
  150. $count = count($arrData);
  151. $output["error"]=1;
  152. $output["message"]="INSERT $count recorders." . "<br>";
  153. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  154. return (true);
  155. }
  156. break;
  157. }
  158. case "update":
  159. {
  160. echo "更在准备更新数据<br>";
  161. if (isset($_POST["data"])) {
  162. $data = $_POST["data"];
  163. } else {
  164. $output["error"]=1;
  165. $output["message"]="没有输入数据<br>";
  166. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  167. return false;
  168. }
  169. $arrData = json_decode($data, true);
  170. $query = "UPDATE {$param->table} SET ";
  171. foreach ($param->update as $row) {
  172. $query .= "{$row} = ? ,";
  173. }
  174. $query .= "{$param->receive_time} = ? where {$param->uuid} = ? ";
  175. $stmt = $PDO->prepare($query);
  176. // 开始一个事务,关闭自动提交
  177. try {
  178. $PDO->beginTransaction();
  179. foreach ($arrData as $one) {
  180. $newRow = array();
  181. foreach ($param->update as $row) {
  182. $newRow[] = $one["{$row}"];
  183. }
  184. $newRow[] = mTime();
  185. $newRow[] = $one["{$param->uuid}"];
  186. $stmt->execute($newRow);
  187. }
  188. // 提交更改
  189. $PDO->commit();
  190. if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
  191. $error = $PDO->errorInfo();
  192. $output["error"]=1;
  193. $output["message"]="error - $error[2] <br>";
  194. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  195. return false;
  196. } else {
  197. $count = count($arrData);
  198. $output["error"]=0;
  199. $output["message"]="INSERT $count recorders." . "<br>";
  200. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  201. return true;
  202. }
  203. } catch (Exception $e) {
  204. $PDO->rollback();
  205. $output["error"]=1;
  206. $output["message"]="Failed:" . $e->getMessage() . "<br>";
  207. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  208. return false;
  209. }
  210. break;
  211. }
  212. default:
  213. break;
  214. }
  215. }