pdo_mysql_subclass.phpt 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. --TEST--
  2. MySQL PDOStatement->execute()/fetch(), Non-SELECT
  3. --SKIPIF--
  4. <?php
  5. require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
  6. require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
  7. MySQLPDOTest::skip();
  8. ?>
  9. --FILE--
  10. <?php
  11. require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
  12. // No silly strict mode warnings, please!
  13. error_reporting(E_ALL^E_STRICT);
  14. ini_set('display_errors', false);
  15. try {
  16. class MyPDO extends PDO {
  17. public function __construct() {
  18. $this->protocol();
  19. return call_user_func_array(array($this, 'parent::__construct'), func_get_args());
  20. }
  21. public function exec() {
  22. $this->protocol();
  23. return call_user_func_array(array($this, 'parent::exec'), func_get_args());
  24. }
  25. public function query() {
  26. $this->protocol();
  27. return call_user_func_array(array($this, 'parent::query'), func_get_args());
  28. }
  29. public function __call($method, $args) {
  30. print "__call(".var_export($method,true).", ".var_export($args, true).")\n";
  31. // $this->protocol();
  32. }
  33. private function protocol() {
  34. $stack = debug_backtrace();
  35. if (!isset($stack[1]))
  36. return;
  37. printf("%s(", $stack[1]['function']);
  38. $args = '';
  39. foreach ($stack[1]['args'] as $k => $v)
  40. $args .= sprintf("%s, ", var_export($v, true));
  41. if ($args != '')
  42. printf("%s", substr($args, 0, -2));
  43. printf(")\n");
  44. }
  45. }
  46. $db = new MyPDO(PDO_MYSQL_TEST_DSN, PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS);
  47. $db->exec('DROP TABLE IF EXISTS test');
  48. $db->exec('CREATE TABLE test(id INT)');
  49. $db->exec('INSERT INTO test(id) VALUES (1), (2)');
  50. $stmt = $db->query('SELECT * FROM test ORDER BY id ASC');
  51. var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
  52. var_dump($stmt->fetch());
  53. $db->intercept_call();
  54. } catch (PDOException $e) {
  55. printf("[001] %s [%s] %s\n",
  56. $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo()));
  57. }
  58. $db->exec('DROP TABLE IF EXISTS test');
  59. print "done!\n";
  60. ?>
  61. --CLEAN--
  62. <?php
  63. require dirname(__FILE__) . '/mysql_pdo_test.inc';
  64. $db = MySQLPDOTest::factory();
  65. $db->exec('DROP TABLE IF EXISTS test');
  66. ?>
  67. --EXPECTF--
  68. __construct('%S', '%S', %s)
  69. exec('DROP TABLE IF EXISTS test')
  70. exec('CREATE TABLE test(id INT)')
  71. exec('INSERT INTO test(id) VALUES (1), (2)')
  72. query('SELECT * FROM test ORDER BY id ASC')
  73. array(2) {
  74. [0]=>
  75. array(1) {
  76. ["id"]=>
  77. string(1) "1"
  78. }
  79. [1]=>
  80. array(1) {
  81. ["id"]=>
  82. string(1) "2"
  83. }
  84. }
  85. bool(false)
  86. __call('intercept_call', array (
  87. ))
  88. exec('DROP TABLE IF EXISTS test')
  89. done!