]> granicus.if.org Git - php/commitdiff
Close PECL Bug #5780
authorWez Furlong <wez@php.net>
Sat, 29 Oct 2005 02:36:30 +0000 (02:36 +0000)
committerWez Furlong <wez@php.net>
Sat, 29 Oct 2005 02:36:30 +0000 (02:36 +0000)
ext/pdo_mysql/mysql_driver.c
ext/pdo_mysql/tests/pecl_bug_5780.phpt [new file with mode: 0644]

index a72ac5c789d74f7feab4ec2b7eae0389aa49f776..0b5570e39cc9ee0034bbff3dde3ffd30b04d86a8 100755 (executable)
@@ -58,7 +58,16 @@ int _pdo_mysql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *file, int lin
                einfo   = &H->einfo;
        }
 
-       einfo->errcode = mysql_errno(H->server);
+#if HAVE_MYSQL_STMT_PREPARE
+       if (S && S->stmt) {
+               einfo->errcode = mysql_stmt_errno(S->stmt);
+       }
+       else
+#endif
+       {
+               einfo->errcode = mysql_errno(H->server);
+       }
+
        einfo->file = file;
        einfo->line = line;
 
diff --git a/ext/pdo_mysql/tests/pecl_bug_5780.phpt b/ext/pdo_mysql/tests/pecl_bug_5780.phpt
new file mode 100644 (file)
index 0000000..643597c
--- /dev/null
@@ -0,0 +1,41 @@
+--TEST--
+PDO MySQL PECL Bug #5780
+--SKIPIF--
+<?php # vim:ft=php:
+if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) die('skip not loaded');
+require dirname(__FILE__) . '/config.inc';
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+PDOTest::skip();
+?>
+--FILE--
+<?php
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+$db = PDOTest::test_factory(dirname(__FILE__). '/common.phpt');
+
+$db->exec("CREATE TABLE test (login varchar(32) NOT NULL, data varchar(64) NOT NULL)");
+$db->exec("CREATE TABLE test2 (login varchar(32) NOT NULL, password varchar(64) NOT NULL)");
+$db->exec("INSERT INTO test2 (login, password) VALUES ('testing', 'testing')");
+$db->exec("INSERT INTO test2 (login, password) VALUES ('test2', 'testpw2')");
+
+$logstmt = $db->prepare('INSERT INTO test (login, data) VALUES (:var1, :var2)');
+$authstmt = $db->prepare('SELECT * FROM test2 WHERE login = :varlog AND password = :varpass');
+$authstmt->execute(array(':varlog' => 'testing', ':varpass' => 'testing'));
+var_dump($authstmt->fetch(PDO::FETCH_NUM));
+@var_dump($logstmt->execute(array(':var1' => 'test1', ':var2' => 'test2')));
+$info = $logstmt->errorInfo();
+unset($info[2]);
+var_dump($info);
+--EXPECT--
+array(2) {
+  [0]=>
+  string(7) "testing"
+  [1]=>
+  string(7) "testing"
+}
+bool(false)
+array(2) {
+  [0]=>
+  string(5) "HY000"
+  [1]=>
+  int(2014)
+}