db_old 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <%!-lmysqlclient%><%#
  2. #include <mysql/mysql.h>
  3. #include <json/json.h>
  4. #include "connectioninfo.H"
  5. using namespace CP;
  6. using namespace cppsp;
  7. MYSQL* db=NULL;
  8. int rn;
  9. int r;
  10. long unsigned int len1;
  11. MYSQL_STMT* stmt;
  12. MYSQL_BIND param[1], results[1];
  13. %>
  14. { "json": [ <%
  15. int queries=1;
  16. auto it=request->queryString.find("queries");
  17. if(it!=request->queryString.end()) {
  18. queries=atoi((*it).second);
  19. }
  20. if(queries<1)queries=1;
  21. if(queries>500)queries=500;
  22. int i;
  23. char query[256];
  24. if(db==NULL) {
  25. db=doConnect(NULL);
  26. stmt=mysql_stmt_init(db);
  27. const char* sql="SELECT randomNumber FROM World WHERE id = ?";
  28. mysql_stmt_prepare(stmt,sql,strlen(sql));
  29. memset(param, 0, sizeof(param));
  30. memset(results, 0, sizeof(results));
  31. param[0].buffer_type = MYSQL_TYPE_LONG;
  32. param[0].buffer = (char *)&rn;
  33. param[0].buffer_length = sizeof(rn);
  34. param[0].is_null = 0;
  35. param[0].length = NULL;
  36. results[0].buffer_type= MYSQL_TYPE_LONG;
  37. results[0].buffer = &r;
  38. results[0].buffer_length = sizeof(r);
  39. results[0].is_null = 0;
  40. results[0].length = &len1;
  41. if(mysql_stmt_bind_param(stmt,param)) throw runtime_error(mysql_stmt_error(stmt));
  42. if(mysql_stmt_bind_result(stmt, results)) throw runtime_error(mysql_stmt_error(stmt));
  43. }
  44. int items[queries];
  45. for (int i=0;i<queries;i++){
  46. rn=rand()%10000;
  47. if(mysql_stmt_execute(stmt)) throw runtime_error(mysql_stmt_error(stmt));
  48. if(mysql_stmt_fetch(stmt)==0) {
  49. items[i]=r;
  50. } else {
  51. items[i]=0;
  52. }
  53. }
  54. for (int i=0;i<queries;i++){
  55. if(i>0) {%>, <%}
  56. %>{ "randomNumber": <%=items[i]%> }<%
  57. }
  58. response->headers["Content-Type"]="application/json";
  59. response->headers["Server"]="cppsp/0.2";
  60. %> ] }