php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #26287 sybase_fetch_array() "identical field names" feature
Submitted: 2003-11-17 08:49 UTC Modified: 2004-01-23 21:05 UTC
Votes:1
Avg. Score:3.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: abazan at filnet dot es Assigned:
Status: Wont fix Package: Feature/Change Request
PHP Version: 4.3.2 OS: --
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: abazan at filnet dot es
New email:
PHP Version: OS:

 

 [2003-11-17 08:49 UTC] abazan at filnet dot es
Description:
------------
Hello, I was recently shocked when I discovered the implementation of
Sybase "identical fields".

The PHP manual for sybase_fetch_array() reads:

<snip>
Note: When selecting fields with identical names (for instance, in a join),
the associative indices will have a sequential number prepended. See the
example for details.
</snip>

I would like to say that I am against implementing these sort of repetitive
field returns.  If a programmer wants multiple (identically named) fields
returned, they can always modify their SQL statement to reflect unique
field names:

select t1.id as id1, t2.id as id2 from t1,t2

PHP should NOT be mangling field names returned from the database driver,
it should simply return the name-value of the LAST field of any given name.


However, if this is to be kept in the code, there are a few important
considerations that should be taken into account regarding the
implementation:

1st. Upgading PHP. There are loads of cases where you can find in a
database different tables with some identical field names. I know this is
poor database design, but sometimes you find that you have to work with a
design where this occurs. With this new feature on sybase_fetch_array() all
the code where one just assumed that the returned value for field X was
from the last table selected, MUST BE RE-WRITTEN.

2nd. IMHO, the implementation of this feature is very poor. When you have a
JOIN over two tables and they have more that one field with the same name:

table A:
id
date
user
afield

table B:
id
date
user
bfield

the resulting join will result in

id
date
user
id1
date2
user3
afield
bfield

A single numeric index is incremented for all repetitive fields, making it
impossible to make it dynamic. (if you made a select using different fields
you will get different field names!!!)
I suggest correcting this implementation to return field names as follows:

id
date
user
id1
date1
user1
afield
bfield

One counter for each repeated field instead of one unique counter for ALL
fields.

3rd. Last but not least... This is a feature only implemented in Sybase
library functions, so when creating cross-db applications, it is much more
difficult to implement generic code.

I would appreciate hearing from the PHP Team about this.
Thanks in advance,

Alex

----------------------------
Alex Bazan
abazan at filnet dot es


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2004-01-23 21:05 UTC] thekid@php.net
See http://www.zend.com/lists/php-dev/200311/msg00630.html, this is here to stay.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Wed Jun 26 14:01:32 2024 UTC