Author: uwendel
Date: 2008-01-09 19:47:53 +0100 (Wed, 09 Jan 2008)
New Revision: 1200
Added:
trunk/tests/ext/pdo_mysql/pdo_mysql_errorcode.phpt
trunk/tests/ext/pdo_mysql/pdo_mysql_errorinfo.phpt
Log:
The generic test does catch the most basic stuff and shows the same bugs.
This one plays with the DB and STMT object and the manual note that an
error on one of them must not influence the statement of the other object.
Yeah, basic...
Added: trunk/tests/ext/pdo_mysql/pdo_mysql_errorcode.phpt
===================================================================
--- trunk/tests/ext/pdo_mysql/pdo_mysql_errorcode.phpt (rev 0)
+++ trunk/tests/ext/pdo_mysql/pdo_mysql_errorcode.phpt 2008-01-09 18:47:53 UTC (rev 1200)
@@ -0,0 +1,70 @@
+--TEST--
+MySQL PDO->errorCode()
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+$db = MySQLPDOTest::factory();
+?>
+--FILE--
+<?php
+ require_once('mysql_pdo_test.inc');
+ $db = MySQLPDOTest::factory();
+ MySQLPDOTest::createTestTable($db);
+
+ function check_error($offset, &$obj, $expected = '00000') {
+
+ $code = $obj->errorCode();
+ if (($code != $expected) && (($expected != '00000') && ($code != '')))
{
+ printf("[%03d] Expecting error code '%s' got code '%s'\n",
+ $offset, $expected, $code);
+ }
+
+ }
+
+ try {
+
+ /*
+ If you create a PDOStatement object through PDO->prepare()
+ or PDO->query() and invoke an error on the statement handle,
+ PDO->errorCode() will not reflect that error. You must call
+ PDOStatement->errorCode() to return the error code for an
+ operation performed on a particular statement handle.
+ */
+ $code = $db->errorCode();
+ check_error(2, $db);
+
+ $stmt = $db->query('SELECT id, label FROM test');
+ $stmt2 = &$stmt;
+ check_error(3, $db);
+ check_error(4, $stmt);
+
+ $db->exec('DROP TABLE IF EXISTS test');
+ @$stmt->execute();
+ check_error(4, $db);
+ check_error(5, $stmt, '42S02');
+ check_error(6, $stmt2, '42S02');
+
+ @$stmt = $db->query('SELECT id, label FROM unknown');
+ check_error(7, $db, '42S02');
+
+ MySQLPDOTest::createTestTable($db);
+ $stmt = $db->query('SELECT id, label FROM test');
+ check_error(8, $db);
+ check_error(9, $stmt);
+
+ $db2 = &$db;
+ @$db->query('SELECT id, label FROM unknown');
+ check_error(10, $db, '42S02');
+ check_error(11, $db2, '42S02');
+ check_error(12, $stmt);
+ check_error(13, $stmt2);
+
+ } catch (PDOException $e) {
+ printf("[001] %s [%s] %s\n",
+ $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo()));
+ }
+ print "done!";
+--EXPECTF--
+done!
\ No newline at end of file
Added: trunk/tests/ext/pdo_mysql/pdo_mysql_errorinfo.phpt
===================================================================
--- trunk/tests/ext/pdo_mysql/pdo_mysql_errorinfo.phpt (rev 0)
+++ trunk/tests/ext/pdo_mysql/pdo_mysql_errorinfo.phpt 2008-01-09 18:47:53 UTC (rev 1200)
@@ -0,0 +1,82 @@
+--TEST--
+MySQL PDO->errorInfo()
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+$db = MySQLPDOTest::factory();
+?>
+--FILE--
+<?php
+ require_once('mysql_pdo_test.inc');
+ $db = MySQLPDOTest::factory();
+ MySQLPDOTest::createTestTable($db);
+
+ function check_error($offset, &$obj, $expected = '00000') {
+
+ $info = $obj->errorInfo();
+ if (count($info) != 3)
+ printf("[%03d] Info should have three fields, got %s\n",
+ $offset, var_export($info, true));
+
+ $code = $info[0];
+ if (($code != $expected) && (($expected != '00000') && ($code != '')))
{
+ printf("[%03d] Expecting error code '%s' got code '%s'\n",
+ $offset, $expected, $code);
+ }
+
+ if ($expected != '00000') {
+ if ($info[1] == '')
+ printf("[%03d] Driver-specific error code not set\n");
+ if ($info[2] == '')
+ printf("[%03d] Driver-specific error message.not set\n");
+ }
+
+ }
+
+ try {
+
+ /*
+ If you create a PDOStatement object through PDO->prepare()
+ or PDO->query() and invoke an error on the statement handle,
+ PDO->errorCode() will not reflect that error. You must call
+ PDOStatement->errorCode() to return the error code for an
+ operation performed on a particular statement handle.
+ */
+ $code = $db->errorCode();
+ check_error(2, $db);
+
+ $stmt = $db->query('SELECT id, label FROM test');
+ $stmt2 = &$stmt;
+ check_error(3, $db);
+ check_error(4, $stmt);
+
+ $db->exec('DROP TABLE IF EXISTS test');
+ @$stmt->execute();
+ check_error(4, $db);
+ check_error(5, $stmt, '42S02');
+ check_error(6, $stmt2, '42S02');
+
+ @$stmt = $db->query('SELECT id, label FROM unknown');
+ check_error(7, $db, '42S02');
+
+ MySQLPDOTest::createTestTable($db);
+ $stmt = $db->query('SELECT id, label FROM test');
+ check_error(8, $db);
+ check_error(9, $stmt);
+
+ $db2 = &$db;
+ @$db->query('SELECT id, label FROM unknown');
+ check_error(10, $db, '42S02');
+ check_error(11, $db2, '42S02');
+ check_error(12, $stmt);
+ check_error(13, $stmt2);
+
+ } catch (PDOException $e) {
+ printf("[001] %s [%s] %s\n",
+ $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo()));
+ }
+ print "done!";
+--EXPECTF--
+done!
\ No newline at end of file
| Thread |
|---|
| • PHP mysqlnd svn commit: r1200 - trunk/tests/ext/pdo_mysql | uwendel | 9 Jan 2008 |