function.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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->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;
  57. $stmt = $PDO->prepare($query);
  58. $stmt->execute(array($time));
  59. $Fetch = $stmt->fetchAll(PDO::FETCH_ASSOC);
  60. if(count($Fetch)>0){
  61. $newTime = $Fetch[count($Fetch)-1]["modify_time"];
  62. $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 ";
  63. $stmt = $PDO->prepare($query);
  64. $stmt->execute(array($time,$newTime));
  65. $Fetch = $stmt->fetchAll(PDO::FETCH_ASSOC);
  66. }
  67. $output["data"]=$Fetch;
  68. return $output;
  69. }
  70. else if(isset($_POST["id"])){
  71. $params = json_decode($_POST["id"],true);
  72. $count =count($params);
  73. /* 创建一个填充了和params相同数量占位符的字符串 */
  74. $place_holders = implode(',', array_fill(0, count($params), '?'));
  75. $query = "SELECT {$param->uuid} as guid, {$param->modify_time} from {$param->table} where {$param->uuid} in ($place_holders) limit 0,".$size;
  76. $stmt = $PDO->prepare($query);
  77. $stmt->execute($params);
  78. $Fetch = $stmt->fetchAll(PDO::FETCH_ASSOC);
  79. $iFetch = count($Fetch);
  80. $output["data"]=$Fetch;
  81. return $output;
  82. }
  83. break;
  84. }
  85. case "get":
  86. {
  87. if (isset($_GET["id"])) {
  88. $id = $_GET["id"];
  89. } else if (isset($_POST["id"])) {
  90. $id = $_POST["id"];
  91. } else {
  92. return (false);
  93. }
  94. $arrId = json_decode($id,true);
  95. /* 创建一个填充了和params相同数量占位符的字符串 */
  96. $place_holders = implode(',', array_fill(0, count($arrId), '?'));
  97. $query = "SELECT * FROM {$param->table} WHERE {$param->uuid} in ($place_holders)";
  98. $stmt = $PDO->prepare($query);
  99. $stmt->execute($arrId);
  100. $Fetch = $stmt->fetchAll(PDO::FETCH_ASSOC);
  101. $output["message"]="提取数据".count($Fetch);
  102. $output["data"]=$Fetch;
  103. return $output;
  104. break;
  105. }
  106. case "insert":
  107. {
  108. if (isset($_POST["data"])) {
  109. $data = $_POST["data"];
  110. } else {
  111. $output["error"]=1;
  112. $output["message"]="没有提交数据";
  113. return $output;
  114. }
  115. // 开始一个事务,关闭自动提交
  116. $PDO->beginTransaction();
  117. $query = "INSERT INTO {$param->table} (";
  118. foreach ($param->insert as $row) {
  119. $query .= "'" . $row . "',";
  120. }
  121. $query = mb_substr($query,0,-1,"UTF-8");
  122. $query .= ") VALUES ( ";
  123. for ($i = 0; $i < count($param->insert); $i++) {
  124. $query .= " ?,";
  125. }
  126. $query = mb_substr($query,0,-1,"UTF-8");
  127. $query .= " )";
  128. $arrData = json_decode($data, true);
  129. $stmt = $PDO->prepare($query);
  130. foreach ($arrData as $oneParam) {
  131. $newRow = array();
  132. foreach ($param->insert as $row) {
  133. $newRow[] = $oneParam["{$row}"];
  134. }
  135. $stmt->execute($newRow);
  136. }
  137. // 提交更改
  138. $PDO->commit();
  139. if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
  140. $error = $PDO->errorInfo();
  141. $output["error"]=1;
  142. $output["message"]="error - $error[2]";
  143. return $output;
  144. } else {
  145. $count = count($arrData);
  146. $output["error"]=0;
  147. $output["message"]="INSERT $count recorders.";
  148. return $output;
  149. }
  150. break;
  151. }
  152. case "update":
  153. {
  154. if (isset($_POST["data"])) {
  155. $data = $_POST["data"];
  156. } else {
  157. $output["error"]=1;
  158. $output["message"]="没有输入数据";
  159. return $output;
  160. }
  161. $arrData = json_decode($data, true);
  162. $query = "UPDATE {$param->table} SET ";
  163. foreach ($param->update as $row) {
  164. $query .= "{$row} = ? ,";
  165. }
  166. $query = mb_substr($query,0,-1,"UTF-8");
  167. $query .= " where {$param->uuid} = ? ";
  168. $stmt = $PDO->prepare($query);
  169. // 开始一个事务,关闭自动提交
  170. try {
  171. $PDO->beginTransaction();
  172. foreach ($arrData as $one) {
  173. $newRow = array();
  174. foreach ($param->update as $row) {
  175. $newRow[] = $one["{$row}"];
  176. }
  177. $newRow[] = $one["{$param->uuid}"];
  178. $stmt->execute($newRow);
  179. }
  180. // 提交更改
  181. $PDO->commit();
  182. if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
  183. $error = $PDO->errorInfo();
  184. $output["error"]=1;
  185. $output["message"]="error - $error[2]";
  186. return $output;
  187. } else {
  188. $count = count($arrData);
  189. $output["error"]=0;
  190. $output["message"]="Update $count recorders.";
  191. return $output;
  192. }
  193. } catch (Exception $e) {
  194. $PDO->rollback();
  195. $output["error"]=1;
  196. $output["message"]="Failed:" . $e->getMessage();
  197. return $output;
  198. }
  199. break;
  200. }
  201. default:
  202. break;
  203. }
  204. }