mirror of
https://github.com/php/php-src.git
synced 2026-04-27 18:23:26 +02:00
Merge branch 'PHP-7.4'
* PHP-7.4: Fix #79106: PDO may fetch wrong column indexes with PDO::FETCH_BOTH
This commit is contained in:
+2
-3
@@ -961,10 +961,9 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, enum pdo_
|
||||
case PDO_FETCH_USE_DEFAULT:
|
||||
case PDO_FETCH_BOTH:
|
||||
zend_symtable_update(Z_ARRVAL_P(return_value), stmt->columns[i].name, &val);
|
||||
if (Z_REFCOUNTED(val)) {
|
||||
Z_ADDREF(val);
|
||||
if (zend_hash_index_add(Z_ARRVAL_P(return_value), i, &val) != NULL) {
|
||||
Z_TRY_ADDREF(val);
|
||||
}
|
||||
zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &val);
|
||||
break;
|
||||
|
||||
case PDO_FETCH_NAMED:
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
--TEST--
|
||||
Bug #79106 (PDO may fetch wrong column indexes with PDO::FETCH_BOTH)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('pdo')) die('skip pdo extension not available');
|
||||
$dir = getenv('REDIR_TEST_DIR');
|
||||
if (!$dir) die('skip no driver');
|
||||
require_once $dir . 'pdo_test.inc';
|
||||
try {
|
||||
$db = PDOTest::factory();
|
||||
} catch (PDOException $e) {
|
||||
die('skip ' . $e->getMessage());
|
||||
}
|
||||
if ($db->query('SELECT 1 as "1"') === false) {
|
||||
die('skip driver does not support quoted numeric identifiers');
|
||||
}
|
||||
?>
|
||||
--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();
|
||||
|
||||
$stmt = $db->query('SELECT 0 as "2007", 0 as "2008", 0 as "2020"');
|
||||
var_dump($stmt->fetchAll());
|
||||
?>
|
||||
--EXPECT--
|
||||
array(1) {
|
||||
[0]=>
|
||||
array(6) {
|
||||
[2007]=>
|
||||
string(1) "0"
|
||||
[0]=>
|
||||
string(1) "0"
|
||||
[2008]=>
|
||||
string(1) "0"
|
||||
[1]=>
|
||||
string(1) "0"
|
||||
[2020]=>
|
||||
string(1) "0"
|
||||
[2]=>
|
||||
string(1) "0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
--TEST--
|
||||
Bug #79106 (PDO may fetch wrong column indexes with PDO::FETCH_BOTH) - collision
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('pdo')) die('skip pdo extension not available');
|
||||
$dir = getenv('REDIR_TEST_DIR');
|
||||
if (!$dir) die('skip no driver');
|
||||
require_once $dir . 'pdo_test.inc';
|
||||
try {
|
||||
$db = PDOTest::factory();
|
||||
} catch (PDOException $e) {
|
||||
die('skip ' . $e->getMessage());
|
||||
}
|
||||
if ($db->query('SELECT 1 as "1"') === false) {
|
||||
die('skip driver does not support quoted numeric identifiers');
|
||||
}
|
||||
?>
|
||||
--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();
|
||||
|
||||
$stmt = $db->query('SELECT 11111 as "1", 22222 as "2"');
|
||||
var_dump($stmt->fetchAll());
|
||||
?>
|
||||
--EXPECT--
|
||||
array(1) {
|
||||
[0]=>
|
||||
array(3) {
|
||||
[1]=>
|
||||
string(5) "11111"
|
||||
[0]=>
|
||||
string(5) "11111"
|
||||
[2]=>
|
||||
string(5) "22222"
|
||||
}
|
||||
}
|
||||
@@ -47,7 +47,7 @@ print "done!";
|
||||
array(2) {
|
||||
[1]=>
|
||||
int(1)
|
||||
[2]=>
|
||||
[0]=>
|
||||
int(1)
|
||||
}
|
||||
done!
|
||||
|
||||
@@ -59,30 +59,4 @@ $db = MySQLPDOTest::factory();
|
||||
print "done!";
|
||||
?>
|
||||
--EXPECT--
|
||||
[002] Suspicious FETCH_BOTH result, dumping
|
||||
array(2) {
|
||||
[0]=>
|
||||
string(1) "1"
|
||||
[1]=>
|
||||
string(1) "1"
|
||||
}
|
||||
array(2) {
|
||||
[1]=>
|
||||
string(1) "1"
|
||||
[2]=>
|
||||
string(1) "1"
|
||||
}
|
||||
[002] Expected differes from returned data, dumping
|
||||
array(2) {
|
||||
[0]=>
|
||||
string(1) "1"
|
||||
[1]=>
|
||||
string(1) "1"
|
||||
}
|
||||
array(2) {
|
||||
[1]=>
|
||||
string(1) "1"
|
||||
[2]=>
|
||||
string(1) "1"
|
||||
}
|
||||
done!
|
||||
|
||||
Reference in New Issue
Block a user