function.php 8.1 KB

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