PageRenderTime 46ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/hphp/test/zend/bad/ext/mysqli/tests/mysqli_stmt_affected_rows.php

https://gitlab.com/iranjith4/hhvm
PHP | 231 lines | 162 code | 62 blank | 7 comment | 50 complexity | 384a7d57770a52eb09127fd4741cd722 MD5 | raw file
  1. <?php
  2. require_once("connect.inc");
  3. $tmp = NULL;
  4. $link = NULL;
  5. if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
  6. printf("Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
  7. $host, $user, $db, $port, $socket);
  8. }
  9. $stmt = mysqli_stmt_init($link);
  10. if (!mysqli_stmt_prepare($stmt, 'DROP TABLE IF EXISTS test_mysqli_stmt_affected_rows_table_1') ||
  11. !mysqli_stmt_execute($stmt)) {
  12. printf("[003] Failed to drop old test table: [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  13. }
  14. if (!mysqli_stmt_prepare($stmt, 'CREATE TABLE test_mysqli_stmt_affected_rows_table_1(id INT, label CHAR(1), PRIMARY KEY(id)) ENGINE = ' . $engine) ||
  15. !mysqli_stmt_execute($stmt)) {
  16. printf("[004] Failed to create test table: [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  17. }
  18. if (0 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  19. printf("[005] Expecting int/0, got %s/'%s'\n", gettype($tmp), $tmp);
  20. mysqli_stmt_close($stmt);
  21. $stmt = mysqli_stmt_init($link);
  22. if (!mysqli_stmt_prepare($stmt, "INSERT INTO test_mysqli_stmt_affected_rows_table_1(id, label) VALUES (1, 'a')") ||
  23. !mysqli_stmt_execute($stmt))
  24. printf("[006] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  25. mysqli_stmt_close($stmt);
  26. $stmt = mysqli_stmt_init($link);
  27. if (!mysqli_stmt_prepare($stmt, "INSERT INTO test_mysqli_stmt_affected_rows_table_1(id, label) VALUES (100, 'z')") ||
  28. !mysqli_stmt_execute($stmt))
  29. printf("[007] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  30. if (1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  31. printf("[008] Expecting int/1, got %s/%s\n", gettype($tmp), $tmp);
  32. mysqli_stmt_close($stmt);
  33. $stmt = mysqli_stmt_init($link);
  34. if (!mysqli_stmt_prepare($stmt, "INSERT INTO test_mysqli_stmt_affected_rows_table_1(id, label) VALUES (100, 'z')") ||
  35. !mysqli_stmt_execute($stmt))
  36. // NOTE: the error message varies with the MySQL Server version, dump only the error code!
  37. printf("[009] [%d] (error message varies with the MySQL Server version, check the error code)\n", mysqli_stmt_errno($stmt));
  38. /* an error occurred: affected rows should return -1 */
  39. if (-1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  40. printf("[010] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
  41. mysqli_stmt_close($stmt);
  42. $stmt = mysqli_stmt_init($link);
  43. if (!mysqli_stmt_prepare($stmt, "INSERT INTO test_mysqli_stmt_affected_rows_table_1(id, label) VALUES (1, 'a') ON DUPLICATE KEY UPDATE id = 4") ||
  44. !mysqli_stmt_execute($stmt))
  45. printf("[011] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  46. if (2 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  47. printf("[012] Expecting int/2, got %s/%s\n", gettype($tmp), $tmp);
  48. mysqli_stmt_close($stmt);
  49. $stmt = mysqli_stmt_init($link);
  50. if (!mysqli_stmt_prepare($stmt, "INSERT INTO test_mysqli_stmt_affected_rows_table_1(id, label) VALUES (2, 'b'), (3, 'c')") ||
  51. !mysqli_stmt_execute($stmt))
  52. printf("[013] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  53. if (2 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  54. printf("[014] Expecting int/2, got %s/%s\n", gettype($tmp), $tmp);
  55. mysqli_stmt_close($stmt);
  56. $stmt = mysqli_stmt_init($link);
  57. if (!mysqli_stmt_prepare($stmt, "INSERT IGNORE INTO test_mysqli_stmt_affected_rows_table_1(id, label) VALUES (1, 'a')") ||
  58. !mysqli_stmt_execute($stmt))
  59. printf("[015] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  60. if (1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  61. printf("[016] Expecting int/1, got %s/%s\n", gettype($tmp), $tmp);
  62. if (!($res = mysqli_query($link, "SELECT count(id) AS num FROM test_mysqli_stmt_affected_rows_table_1")) ||
  63. !($tmp = mysqli_fetch_assoc($res)))
  64. printf("[017] [%d] %s\n", mysqli_error($link), mysqli_error($link));
  65. $num = (int)$tmp['num'];
  66. mysqli_free_result($res);
  67. mysqli_stmt_close($stmt);
  68. $stmt = mysqli_stmt_init($link);
  69. if (!mysqli_stmt_prepare($stmt, "INSERT INTO test_mysqli_stmt_affected_rows_table_1(id, label) SELECT id + 10, label FROM test_mysqli_stmt_affected_rows_table_1") ||
  70. !mysqli_stmt_execute($stmt))
  71. printf("[018] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  72. if ($num !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  73. printf("[019] Expecting int/%d, got %s/%s\n", $num, gettype($tmp), $tmp);
  74. mysqli_stmt_close($stmt);
  75. $stmt = mysqli_stmt_init($link);
  76. if (!mysqli_stmt_prepare($stmt, "REPLACE INTO test_mysqli_stmt_affected_rows_table_1(id, label) values (4, 'd')") ||
  77. !mysqli_stmt_execute($stmt))
  78. printf("[020] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  79. if (2 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  80. printf("[021] Expecting int/2, got %s/%s\n", gettype($tmp), $tmp);
  81. mysqli_stmt_close($stmt);
  82. $stmt = mysqli_stmt_init($link);
  83. if (!mysqli_stmt_prepare($stmt, "REPLACE INTO test_mysqli_stmt_affected_rows_table_1(id, label) values (5, 'e')") ||
  84. !mysqli_stmt_execute($stmt))
  85. printf("[022] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  86. if (1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  87. printf("[023] Expecting int/1, got %s/%s\n", gettype($tmp), $tmp);
  88. mysqli_stmt_close($stmt);
  89. $stmt = mysqli_stmt_init($link);
  90. if (!mysqli_stmt_prepare($stmt, "UPDATE test SET label = 'a' WHERE id = 2") ||
  91. !mysqli_stmt_execute($stmt))
  92. printf("[024] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  93. if (1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  94. printf("[025] Expecting int/1, got %s/%s\n", gettype($tmp), $tmp);
  95. if (!mysqli_stmt_prepare($stmt, "UPDATE test SET label = 'a' WHERE id = 2") ||
  96. !mysqli_stmt_execute($stmt))
  97. printf("[026] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  98. if (0 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  99. printf("[027] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
  100. mysqli_stmt_close($stmt);
  101. $stmt = mysqli_stmt_init($link);
  102. if (!mysqli_stmt_prepare($stmt, "UPDATE test SET label = 'a' WHERE id = 100") ||
  103. !mysqli_stmt_execute($stmt))
  104. printf("[028] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  105. if (1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  106. printf("[029] Expecting int/1, got %s/%s\n", gettype($tmp), $tmp);
  107. if (!mysqli_stmt_prepare($stmt, 'SELECT label FROM test_mysqli_stmt_affected_rows_table_1 WHERE id = 100') ||
  108. !mysqli_stmt_execute($stmt))
  109. printf("[030] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  110. /* use it like num_rows */
  111. /* PS are unbuffered, num_rows cannot determine the row count before all rows have been fetched and/or buffered */
  112. if (-1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  113. printf("[031] Expecting int/-1, got %s/%s\n", gettype($tmp), $tmp);
  114. if (0 !== ($tmp = mysqli_stmt_num_rows($stmt)))
  115. printf("[032] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
  116. if (!mysqli_stmt_store_result($stmt))
  117. printf("[033] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  118. if (1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  119. printf("[034] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
  120. if (1 !== ($tmp = mysqli_stmt_num_rows($stmt)))
  121. printf("[035] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
  122. mysqli_stmt_free_result($stmt);
  123. mysqli_stmt_close($stmt);
  124. $stmt = mysqli_stmt_init($link);
  125. if (!mysqli_stmt_prepare($stmt, 'SELECT label FROM test_mysqli_stmt_affected_rows_table_1 WHERE 1 = 2') ||
  126. !mysqli_stmt_execute($stmt))
  127. printf("[036] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  128. /* use it like num_rows */
  129. if (-1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  130. printf("[037] Expecting int/-1, got %s/%s\n", gettype($tmp), $tmp);
  131. if (true !== ($tmp = mysqli_stmt_store_result($stmt)))
  132. printf("[038] Expecting boolean/true, got %s\%s\n", gettype($tmp), $tmp);
  133. if (0 !== ($tmp = mysqli_stmt_num_rows($stmt)))
  134. printf("[039] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
  135. if (0 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  136. printf("[040] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
  137. /* try to use stmt_affected_rows like stmt_num_rows */
  138. /* stmt_affected_rows is not really meant for SELECT! */
  139. if (mysqli_stmt_prepare($stmt, 'SELECT unknown_column FROM this_table_does_not_exist') ||
  140. mysqli_stmt_execute($stmt))
  141. printf("[041] The invalid SELECT statement is issued on purpose\n");
  142. if (-1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  143. printf("[042] Expecting int/-1, got %s/%s\n", gettype($tmp), $tmp);
  144. if ($IS_MYSQLND) {
  145. if (false !== ($tmp = mysqli_stmt_store_result($stmt)))
  146. printf("[043] Expecting boolean/false, got %s\%s\n", gettype($tmp), $tmp);
  147. } else {
  148. if (true !== ($tmp = mysqli_stmt_store_result($stmt)))
  149. printf("[043] Libmysql does not care if the previous statement was bogus, expecting boolean/true, got %s\%s\n", gettype($tmp), $tmp);
  150. }
  151. if (0 !== ($tmp = mysqli_stmt_num_rows($stmt)))
  152. printf("[044] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
  153. if (-1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
  154. printf("[045] Expecting int/-1, got %s/%s\n", gettype($tmp), $tmp);
  155. mysqli_stmt_close($stmt);
  156. $stmt = mysqli_stmt_init($link);
  157. if (!mysqli_stmt_prepare($stmt, "DROP TABLE IF EXISTS test_mysqli_stmt_affected_rows_table_1") ||
  158. !mysqli_stmt_execute($stmt))
  159. printf("[046] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
  160. mysqli_stmt_close($stmt);
  161. if (!is_null($tmp = mysqli_stmt_affected_rows($stmt)))
  162. printf("[047] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
  163. mysqli_close($link);
  164. print "done!";
  165. ?>
  166. <?php error_reporting(0); ?>
  167. <?php
  168. $test_table_name = 'test_mysqli_stmt_affected_rows_table_1'; require_once("clean_table.inc");
  169. ?>