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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
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

Pull Requests

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-2025 The PHP Group
All rights reserved.
Last updated: Wed Jul 09 11:01:34 2025 UTC