Advertisement
Guest User

Untitled

a guest
Jan 29th, 2017
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.00 KB | None | 0 0
  1. <?php
  2.  
  3.  
  4. function connection_mysql($connection_id) {
  5. static $connections = array();
  6. if (!isset($connections[$connection_id])) {
  7. $connection_options['pdo'] = array();
  8. $connection_options['pdo'][PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  9. $cnn = new \PDO("mysql:host=127.0.0.1;dbname=testingsite26", 'root', 'root', $connection_options['pdo']);
  10. $cnn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
  11. $cnn->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
  12. $connections[$connection_id] = $cnn;
  13. }
  14. return $connections[$connection_id];
  15. }
  16.  
  17. /**
  18. *
  19. * @param string $connection_id
  20. *
  21. * @return PDO
  22. */
  23. function connection($connection_id) {
  24. $host = $_SERVER['SABENTIS_DB_HOST'];
  25. $database = $_SERVER['SABENTIS_DB_DATABASE'];
  26. $username = $_SERVER['SABENTIS_DB_LOGIN'];
  27. $password = $_SERVER['SABENTIS_DB_PASSWORD'];
  28.  
  29. static $connections = array();
  30. if (!isset($connections[$connection_id])) {
  31. $connection_options['pdo'] = array();
  32. $connection_options['pdo'][PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  33. $connection_options['pdo'][PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE] = TRUE;
  34. $connection_options['pdo'][PDO::ATTR_STRINGIFY_FETCHES] = FALSE;
  35. $dns = "sqlsrv:server=$host;Database=$database";
  36. echo $dns;
  37. $cnn = new \PDO($dns, $username, $password, $connection_options['pdo']);
  38. $connections[$connection_id] = $cnn;
  39.  
  40. }
  41. return $connections[$connection_id];
  42. }
  43.  
  44. /**
  45. * Summary of prepare
  46. *
  47. * @param mixed $connection
  48. * @param mixed $query
  49. * @return PDOStatement
  50. */
  51. function prepare($connection, $query, $buffered = TRUE) {
  52. $pdo_options = array();
  53. $pdo_options[PDO::ATTR_EMULATE_PREPARES] = TRUE;
  54. $pdo_options[PDO::SQLSRV_ATTR_DIRECT_QUERY] = TRUE;
  55. if ($buffered) {
  56. $pdo_options[PDO::ATTR_CURSOR] = PDO::CURSOR_SCROLL;
  57. $pdo_options[PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE] = PDO::SQLSRV_CURSOR_BUFFERED;
  58. }
  59. return $connection->prepare($query, $pdo_options);
  60. }
  61.  
  62. function prepare_mysql($connection, $query, $buffered = TRUE) {
  63. $pdo_options = array();
  64. $pdo_options[PDO::MYSQL_ATTR_USE_BUFFERED_QUERY] = $buffered;
  65. return $connection->prepare($query, $pdo_options);
  66. }
  67.  
  68. /**
  69. * Summary of execute
  70. *
  71. * @param PDO $connection
  72. * @param string $query
  73. *
  74. * @param PDOStatement;
  75. */
  76. function execute($connection, $query, array $args = array(), $buffered = TRUE) {
  77. $st = prepare($connection, $query, $buffered);
  78. $st->execute($args);
  79. return $st;
  80. }
  81.  
  82. function execute_mysql($connection, $query, array $args = array(), $buffered = TRUE) {
  83. $st = prepare_mysql($connection, $query, $buffered);
  84. $st->execute($args);
  85. return $st;
  86. }
  87.  
  88.  
  89. //*******************************************************
  90. // TEST BEGIN
  91. //*******************************************************
  92.  
  93. $connection = connection('default');
  94.  
  95. // Drop
  96. try {
  97. execute($connection, 'DROP TABLE TEST');
  98. }
  99. catch(\Exception $e) {}
  100.  
  101.  
  102. // Recreate
  103. execute($connection, "CREATE TABLE TEST([id] [int] IDENTITY(1,1) NOT NULL, [myinteger] int, [mybiginteger] bigint, [myfloat] float, [mysmallint] smallint, [mybit] bit, [myreal] real, [mynvarchar] nvarchar(max))");
  104.  
  105. $sample_data = [
  106. ':myinteger' => 25,
  107. ':mybiginteger' =>1236544123211,
  108. ':myfloat' =>23652.3221452,
  109. ':mysmallint' =>5632,
  110. ':mybit' => 1,
  111. ':myreal' => 1256325.3214587,
  112. ':mynvarchar' => 'en un lugar de la mancha de cuyo nombre no puedo acordarme...'
  113. ];
  114.  
  115. $columns = array_keys($sample_data);
  116. array_walk($columns, function(&$item) {
  117. $item = substr($item, 1, strlen($item) - 1);
  118. });
  119.  
  120. $time = microtime(TRUE);
  121. try {
  122. for ($x = 0; $x < 5000; $x++) {
  123. execute($connection, "INSERT INTO TEST (" . implode(',', $columns) . ") VALUES (" . implode(',', array_keys($sample_data)) . ")", $sample_data);
  124. }
  125. }
  126. catch (\Throwable $error) {
  127. echo $error->getMessage();
  128. exit();
  129. }
  130. echo "<br/>INSERT LAPSED:" . (microtime(TRUE) - $time) * 1000;
  131.  
  132. $statement = execute($connection, "SELECT * FROM TEST");
  133. $time = microtime(TRUE);
  134. $i = 0;
  135. while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
  136. $i++;
  137. }
  138. echo "<br/>LAPSED FETCH_ASSOC ($i):" . (microtime(TRUE) - $time) * 1000;
  139.  
  140. $statement = execute($connection, "SELECT * FROM TEST");
  141. $time = microtime(TRUE);
  142. $i = 0;
  143. while($row = $statement->fetch(PDO::FETCH_OBJ)) {
  144. $i++;
  145. }
  146. echo "<br/>LAPSED FETCH_OBJ ($i):" . (microtime(TRUE) - $time) * 1000;
  147.  
  148.  
  149. $statement = execute($connection, "SELECT * FROM TEST", [], FALSE);
  150. $time = microtime(TRUE);
  151. $i = 0;
  152. while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
  153. $i++;
  154. }
  155. echo "<br/>LAPSED FETCH_ASSOC NON BUFFERED ($i):" . (microtime(TRUE) - $time) * 1000;
  156.  
  157. $statement = execute($connection, "SELECT * FROM TEST", [], FALSE);
  158. $time = microtime(TRUE);
  159. $i = 0;
  160. while($row = $statement->fetch(PDO::FETCH_OBJ)) {
  161. $i++;
  162. }
  163. echo "<br/>LAPSED FETCH_OBJ NON BUFFERED ($i):" . (microtime(TRUE) - $time) * 1000;
  164.  
  165. # Do the same for MYSQL
  166.  
  167. $connection = connection_mysql('default');
  168.  
  169. // Drop
  170. try {
  171. execute_mysql($connection, 'DROP TABLE TEST');
  172. }
  173. catch(\Exception $e) {
  174.  
  175. }
  176.  
  177.  
  178. // Recreate
  179. execute_mysql($connection, "CREATE TABLE TEST (id int NOT NULL AUTO_INCREMENT, myinteger int, mybiginteger int, myfloat float, mysmallint smallint, mybit bit, myreal real, mynvarchar nvarchar(255), PRIMARY KEY (ID))");
  180.  
  181. $sample_data = [
  182. ':myinteger' => 25,
  183. ':mybiginteger' =>2543,
  184. ':myfloat' =>23652.3221452,
  185. ':mysmallint' =>532,
  186. ':mybit' => false,
  187. ':myreal' => 12325.3214587,
  188. ':mynvarchar' => 'en un lugar de la mancha de cuyo nombre no puedo acordarme...'
  189. ];
  190.  
  191. $columns = array_keys($sample_data);
  192. array_walk($columns, function(&$item) {
  193. $item = substr($item, 1, strlen($item) - 1);
  194. });
  195.  
  196. $time = microtime(TRUE);
  197. try {
  198. for ($x = 0; $x < 5000; $x++) {
  199. execute_mysql($connection, "INSERT INTO TEST (" . implode(',', $columns) . ") VALUES (" . implode(',', array_keys($sample_data)) . ")", $sample_data);
  200. }
  201. }
  202. catch (\Throwable $error) {
  203. echo $error->getMessage();
  204. exit();
  205. }
  206. echo "<br/>INSERT LAPSED:" . (microtime(TRUE) - $time) * 1000;
  207.  
  208. $statement = execute_mysql($connection, "SELECT * FROM TEST");
  209. $time = microtime(TRUE);
  210. $i = 0;
  211. while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
  212. $i++;
  213. }
  214. echo "<br/>LAPSED FETCH_ASSOC ($i):" . (microtime(TRUE) - $time) * 1000;
  215.  
  216. $statement = execute_mysql($connection, "SELECT * FROM TEST");
  217. $time = microtime(TRUE);
  218. $i = 0;
  219. while($row = $statement->fetch(PDO::FETCH_OBJ)) {
  220. $i++;
  221. }
  222. echo "<br/>LAPSED FETCH_OBJ ($i):" . (microtime(TRUE) - $time) * 1000;
  223.  
  224.  
  225. $statement = execute_mysql($connection, "SELECT * FROM TEST", [], FALSE);
  226. $time = microtime(TRUE);
  227. $i = 0;
  228. while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
  229. $i++;
  230. }
  231. echo "<br/>LAPSED FETCH_ASSOC NON BUFFERED ($i):" . (microtime(TRUE) - $time) * 1000;
  232.  
  233. $statement = execute_mysql($connection, "SELECT * FROM TEST", [], FALSE);
  234. $time = microtime(TRUE);
  235. $i = 0;
  236. while($row = $statement->fetch(PDO::FETCH_OBJ)) {
  237. $i++;
  238. }
  239. echo "<br/>LAPSED FETCH_OBJ NON BUFFERED ($i):" . (microtime(TRUE) - $time) * 1000;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement