db-no-async.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. class Db
  3. {
  4. public static PDOStatement $db;
  5. public static PDOStatement $fortune;
  6. public static PDOStatement $random;
  7. public static PDOStatement $update;
  8. public static function init()
  9. {
  10. $pdo = new PDO(
  11. "mysql:host=tfb-database;dbname=hello_world",
  12. "benchmarkdbuser",
  13. "benchmarkdbpass",
  14. [
  15. PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  16. PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  17. PDO::ATTR_EMULATE_PREPARES => false
  18. ]
  19. );
  20. self::$db = $pdo->prepare('SELECT id,randomNumber FROM World WHERE id = ?');
  21. self::$fortune = $pdo->prepare('SELECT id,message FROM Fortune');
  22. self::$random = $pdo->prepare('SELECT id,randomNumber FROM World WHERE id = ?');
  23. self::$update = $pdo->prepare('UPDATE World SET randomNumber = ? WHERE id = ?');
  24. }
  25. }
  26. /**
  27. * The DB test
  28. *
  29. * @return string
  30. */
  31. function db(): string
  32. {
  33. Db::$db->execute([mt_rand(1, 10000)]);
  34. return json_encode(Db::$db->fetch(), JSON_NUMERIC_CHECK);
  35. }
  36. /**
  37. * The Queries test
  38. *
  39. * @param int $queries
  40. *
  41. * @return string
  42. */
  43. function query(int $queries = 1): string
  44. {
  45. // Read number of queries to run from URL parameter
  46. $query_count = 1;
  47. if ($queries > 1) {
  48. $query_count = $queries > 500 ? 500 : $queries;
  49. }
  50. // Create an array with the response string.
  51. $arr = [];
  52. // For each query, store the result set values in the response array
  53. while ($query_count--) {
  54. DB::$db->execute([mt_rand(1, 10000)]);
  55. $arr[] = Db::$db->fetch();
  56. }
  57. return json_encode($arr, JSON_NUMERIC_CHECK);
  58. }
  59. /**
  60. * The Fortunes test
  61. *
  62. * @return string
  63. */
  64. function fortunes(): string
  65. {
  66. $fortune = [];
  67. Db::$fortune->execute();
  68. $fortune = Db::$fortune->fetchAll(PDO::FETCH_KEY_PAIR);
  69. $fortune[0] = 'Additional fortune added at request time.';
  70. asort($fortune);
  71. $html = '';
  72. foreach ($fortune as $id => $message) {
  73. $message = htmlspecialchars($message, ENT_QUOTES, 'UTF-8');
  74. $html .= "<tr><td>$id</td><td>$message</td></tr>";
  75. }
  76. return "<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>$html</table></body></html>";
  77. }
  78. /**
  79. * The Updates test
  80. *
  81. * @param int $queries
  82. *
  83. * @return string
  84. */
  85. function updates(int $queries): string
  86. {
  87. $query_count = 1;
  88. if ($queries > 1) {
  89. $query_count = $queries > 500 ? 500 : $queries;
  90. }
  91. while ($query_count--) {
  92. $id = mt_rand(1, 10000);
  93. Db::$random->execute([$id]);
  94. $world = ["id" => $id, "randomNumber" => Db::$random->fetchColumn()];
  95. $world['randomNumber'] = mt_rand(1, 10000);
  96. Db::$update->execute([$world['randomNumber'], $world['id']]);
  97. $arr[] = $world;
  98. }
  99. return json_encode($arr, JSON_NUMERIC_CHECK);
  100. }