Bug #81103 [Opn]: mysqli_both overwrites numerical indexes

From: Date: Tue, 08 Jun 2021 14:05:02 +0000
Subject: Bug #81103 [Opn]: mysqli_both overwrites numerical indexes
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-234264@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=81103&edit=1 ID: 81103 Updated by: nikic@php.net Reported by: dharman@php.net Summary: mysqli_both overwrites numerical indexes Status: Open Type: Bug Package: MySQLi related PHP Version: 7.4.20 Block user comment: N Private report: N New Comment: I'm inclined to close this as Won't Fix. Bug #79084 was a legitimate issue, but here there is no obviously correct way in which it should behave. Previous Comments: ------------------------------------------------------------------------ [2021-06-04 11:32:24] cmb@php.net FTR, this is related to the fix for bug #79084. Anyhow, given that column names may be numeric, I don't think the mentioned part of the documentation makes sense. I suggest to reword that to something like: | If two or more columns of the result have the same field names, | the last column will take precedence and overwrite the earlier | data. It is recommended to use the <constant>MYSQLI_NUM</constant | <parameter>mode</parameter> for such queries. ------------------------------------------------------------------------ [2021-06-03 20:37:47] fffg at gaeeer dot gg garbage in, garbage out and a query like that shouldn't exist in any codebase - and if it exists common sense says USE_BOTH makes no sense ------------------------------------------------------------------------ [2021-06-03 20:21:48] dharman@php.net Sorry, I messed up the test case. This one should be better: $res = $mysqli->query("SELECT 'a' AS 0, 'b' AS 0"); The expected result here is array(2) { [0]=> string(1) "a" [1]=> string(1) "b" } The idea is that numerical indices must take precedence over the associative keys. I don't have a solution for this. ------------------------------------------------------------------------ [2021-06-03 19:55:05] requinix@php.net So don't use numerical aliases? Or don't use MYSQLI_BOTH? What kind of solution do you have in mind? ------------------------------------------------------------------------ [2021-06-03 19:35:32] dharman@php.net Description: ------------ Per the documentation "If two or more columns of the result have the same field names, the last column will take precedence and overwrite the earlier data. In order to access multiple columns with the same name, the numerically indexed version of the row must be used." When executing a query with numerical column names, associative names overwrite the numerical indices. For example, in the code below it is impossible to access value 'a' as it has been overwritten with 'b' Test script: --------------- $res = $mysqli->query("SELECT 'abc', 'a' AS 1, 'b' AS 1"); var_dump($res->fetch_array()); Expected result: ---------------- array(4) { [0]=> string(3) "abc" ["abc"]=> string(3) "abc" [1]=> string(1) "b" [2]=> string(1) "b" } Actual result: -------------- array(4) { [0]=> string(3) "abc" ["abc"]=> string(3) "abc" [1]=> string(1) "a" [2]=> string(1) "b" } ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=81103&edit=1

« previous php.bugs (#234264) next »