diff options
| author | Ilia Alshanetsky <iliaa@php.net> | 2007-10-11 20:56:22 +0000 |
|---|---|---|
| committer | Ilia Alshanetsky <iliaa@php.net> | 2007-10-11 20:56:22 +0000 |
| commit | accfde57cae9789fc6ae9d29645aff2e11dc8006 (patch) | |
| tree | f063494fe145cdd4803b65ca52e891752349d1ed /ext/pdo | |
| parent | 94a3bb327ed848bfbb2dc7fd525a9d769278f24c (diff) | |
| download | php-git-accfde57cae9789fc6ae9d29645aff2e11dc8006.tar.gz | |
MFB: Fixed bug #42917 (PDO::FETCH_KEY_PAIR doesn't work with setFetchMode)
Diffstat (limited to 'ext/pdo')
| -rwxr-xr-x | ext/pdo/pdo_stmt.c | 9 | ||||
| -rw-r--r-- | ext/pdo/tests/bug_42917.phpt | 40 |
2 files changed, 46 insertions, 3 deletions
diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index ef86c7e1ac..7b94820986 100755 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -1260,7 +1260,7 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, } /* }}} */ -static int pdo_stmt_verify_mode(pdo_stmt_t *stmt, int mode, int fetch_all TSRMLS_DC) /* {{{ */ +static int pdo_stmt_verify_mode(pdo_stmt_t *stmt, long mode, int fetch_all TSRMLS_DC) /* {{{ */ { int flags = mode & PDO_FETCH_FLAGS; @@ -1549,7 +1549,9 @@ static PHP_METHOD(PDOStatement, fetchAll) if (!error) { PDO_STMT_CLEAR_ERR(); MAKE_STD_ZVAL(data); - if ((how & PDO_FETCH_GROUP) || how == PDO_FETCH_KEY_PAIR) { + if ( (how & PDO_FETCH_GROUP) || how == PDO_FETCH_KEY_PAIR || + (how == PDO_FETCH_USE_DEFAULT && stmt->default_fetch_type == PDO_FETCH_KEY_PAIR) + ) { array_init(return_value); return_all = return_value; } else { @@ -1565,7 +1567,7 @@ static PHP_METHOD(PDOStatement, fetchAll) do { MAKE_STD_ZVAL(data); } while (do_fetch(stmt, TRUE, data, how, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC)); - } else if (how == PDO_FETCH_KEY_PAIR) { + } else if (how == PDO_FETCH_KEY_PAIR || (how == PDO_FETCH_USE_DEFAULT && stmt->default_fetch_type == PDO_FETCH_KEY_PAIR)) { while (do_fetch(stmt, TRUE, data, how, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC)); } else { array_init(return_value); @@ -1916,6 +1918,7 @@ fail_out: case PDO_FETCH_OBJ: case PDO_FETCH_BOUND: case PDO_FETCH_NAMED: + case PDO_FETCH_KEY_PAIR: break; case PDO_FETCH_COLUMN: diff --git a/ext/pdo/tests/bug_42917.phpt b/ext/pdo/tests/bug_42917.phpt new file mode 100644 index 0000000000..d4b71f57da --- /dev/null +++ b/ext/pdo/tests/bug_42917.phpt @@ -0,0 +1,40 @@ +--TEST-- +PDO Common: Bug #42917 (PDO::FETCH_KEY_PAIR doesn't work with setFetchMode) +--SKIPIF-- +<?php # vim:ft=php +if (!extension_loaded('pdo')) die('skip'); +$dir = getenv('REDIR_TEST_DIR'); +if (false == $dir) die('skip no driver'); +require_once $dir . 'pdo_test.inc'; +PDOTest::skip(); +?> +--FILE-- +<?php +if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/'); +require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc'; +$db = PDOTest::factory(); + +$db->exec("CREATE TABLE test (a varchar(100), b varchar(100), c varchar(100))"); + +for ($i = 0; $i < 5; $i++) { + $db->exec("INSERT INTO test (a,b,c) VALUES('test".$i."','".$i."','".$i."')"); +} + +$res = $db->query("SELECT a,b FROM test"); +$res->setFetchMode(PDO::FETCH_KEY_PAIR); +var_dump($res->fetchAll()); + +?> +--EXPECT-- +array(5) { + ["test0"]=> + string(1) "0" + ["test1"]=> + string(1) "1" + ["test2"]=> + string(1) "2" + ["test3"]=> + string(1) "3" + ["test4"]=> + string(1) "4" +} |
