Advertisement
Guest User

Untitled

a guest
Jan 29th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.20 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, $fetch_numeric = FALSE) {
  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] = $fetch_numeric;
  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. echo "<br/> NOW FETCH WITH NUMERIC";
  166.  
  167. $connection = connection('default', TRUE);
  168.  
  169. // Drop
  170. try {
  171. execute($connection, 'DROP TABLE TEST');
  172. }
  173. catch(\Exception $e) {}
  174.  
  175.  
  176. // Recreate
  177. 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))");
  178.  
  179. $sample_data = [
  180. ':myinteger' => 25,
  181. ':mybiginteger' =>1236544123211,
  182. ':myfloat' =>23652.3221452,
  183. ':mysmallint' =>5632,
  184. ':mybit' => 1,
  185. ':myreal' => 1256325.3214587,
  186. ':mynvarchar' => 'en un lugar de la mancha de cuyo nombre no puedo acordarme...'
  187. ];
  188.  
  189. $columns = array_keys($sample_data);
  190. array_walk($columns, function(&$item) {
  191. $item = substr($item, 1, strlen($item) - 1);
  192. });
  193.  
  194. $time = microtime(TRUE);
  195. try {
  196. for ($x = 0; $x < 5000; $x++) {
  197. execute($connection, "INSERT INTO TEST (" . implode(',', $columns) . ") VALUES (" . implode(',', array_keys($sample_data)) . ")", $sample_data);
  198. }
  199. }
  200. catch (\Throwable $error) {
  201. echo $error->getMessage();
  202. exit();
  203. }
  204. echo "<br/>INSERT LAPSED:" . (microtime(TRUE) - $time) * 1000;
  205.  
  206. $statement = execute($connection, "SELECT * FROM TEST");
  207. $time = microtime(TRUE);
  208. $i = 0;
  209. while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
  210. $i++;
  211. }
  212. echo "<br/>LAPSED FETCH_ASSOC ($i):" . (microtime(TRUE) - $time) * 1000;
  213.  
  214. $statement = execute($connection, "SELECT * FROM TEST");
  215. $time = microtime(TRUE);
  216. $i = 0;
  217. while($row = $statement->fetch(PDO::FETCH_OBJ)) {
  218. $i++;
  219. }
  220. echo "<br/>LAPSED FETCH_OBJ ($i):" . (microtime(TRUE) - $time) * 1000;
  221.  
  222.  
  223. $statement = execute($connection, "SELECT * FROM TEST", [], FALSE);
  224. $time = microtime(TRUE);
  225. $i = 0;
  226. while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
  227. $i++;
  228. }
  229. echo "<br/>LAPSED FETCH_ASSOC NON BUFFERED ($i):" . (microtime(TRUE) - $time) * 1000;
  230.  
  231. $statement = execute($connection, "SELECT * FROM TEST", [], FALSE);
  232. $time = microtime(TRUE);
  233. $i = 0;
  234. while($row = $statement->fetch(PDO::FETCH_OBJ)) {
  235. $i++;
  236. }
  237. echo "<br/>LAPSED FETCH_OBJ NON BUFFERED ($i):" . (microtime(TRUE) - $time) * 1000;
  238.  
  239. # Do the same for MYSQL
  240.  
  241. echo "<br/> HERE COMES MYSQL";
  242.  
  243.  
  244. $connection = connection_mysql('default');
  245.  
  246. // Drop
  247. try {
  248. execute_mysql($connection, 'DROP TABLE TEST');
  249. }
  250. catch(\Exception $e) {
  251.  
  252. }
  253.  
  254.  
  255. // Recreate
  256. 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))");
  257.  
  258. $sample_data = [
  259. ':myinteger' => 25,
  260. ':mybiginteger' =>2543,
  261. ':myfloat' =>23652.3221452,
  262. ':mysmallint' =>532,
  263. ':mybit' => false,
  264. ':myreal' => 12325.3214587,
  265. ':mynvarchar' => 'en un lugar de la mancha de cuyo nombre no puedo acordarme...'
  266. ];
  267.  
  268. $columns = array_keys($sample_data);
  269. array_walk($columns, function(&$item) {
  270. $item = substr($item, 1, strlen($item) - 1);
  271. });
  272.  
  273. $time = microtime(TRUE);
  274. try {
  275. for ($x = 0; $x < 5000; $x++) {
  276. execute_mysql($connection, "INSERT INTO TEST (" . implode(',', $columns) . ") VALUES (" . implode(',', array_keys($sample_data)) . ")", $sample_data);
  277. }
  278. }
  279. catch (\Throwable $error) {
  280. echo $error->getMessage();
  281. exit();
  282. }
  283. echo "<br/>INSERT LAPSED:" . (microtime(TRUE) - $time) * 1000;
  284.  
  285. $statement = execute_mysql($connection, "SELECT * FROM TEST");
  286. $time = microtime(TRUE);
  287. $i = 0;
  288. while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
  289. $i++;
  290. }
  291. echo "<br/>LAPSED FETCH_ASSOC ($i):" . (microtime(TRUE) - $time) * 1000;
  292.  
  293. $statement = execute_mysql($connection, "SELECT * FROM TEST");
  294. $time = microtime(TRUE);
  295. $i = 0;
  296. while($row = $statement->fetch(PDO::FETCH_OBJ)) {
  297. $i++;
  298. }
  299. echo "<br/>LAPSED FETCH_OBJ ($i):" . (microtime(TRUE) - $time) * 1000;
  300.  
  301.  
  302. $statement = execute_mysql($connection, "SELECT * FROM TEST", [], FALSE);
  303. $time = microtime(TRUE);
  304. $i = 0;
  305. while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
  306. $i++;
  307. }
  308. echo "<br/>LAPSED FETCH_ASSOC NON BUFFERED ($i):" . (microtime(TRUE) - $time) * 1000;
  309.  
  310. $statement = execute_mysql($connection, "SELECT * FROM TEST", [], FALSE);
  311. $time = microtime(TRUE);
  312. $i = 0;
  313. while($row = $statement->fetch(PDO::FETCH_OBJ)) {
  314. $i++;
  315. }
  316. echo "<br/>LAPSED FETCH_OBJ NON BUFFERED ($i):" . (microtime(TRUE) - $time) * 1000;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement