Thanks Cris! I've fixed the manual.
Nuno ----- Original Message ----- > From having a look in the source, and more pain with > pgsql than anyone should be subjected to, I think > what's happening is a cross-confusion of two issues. > > You're right in that if you call it with three > parameters the validation equates to your > interpretation, not his, and the column can be > specified as either string (name) or long (number). > > Where *he's* going wrong is in dealing with pgsql's > case-handling. Postgres will lower-case all column > names by default, *unless* you wrap them in quotes > when you create the table to preserve the casing. This > means that you have to wrap the column names in quotes > (to preserve the casing) in *every damn statement / > query* you make to that table thereafter. What he's > doing is initialising the column name *directly* with > the return value of another query, but not wrapping it > in escaped quotes, so postgres is treating the > $fieldname in the later pg_field_prtlen() call as > 'second_column' and not '"Second_Column"'. Basically: > it's a combination of a postgres issue and his code. I > think. :) > > Cris > > > > > > ID: 28994 > > > User updated by: bas at vanklinkenbergsoftware > > dot nl > > > Reported By: bas at vanklinkenbergsoftware > > dot nl > > > Status: Open > > > Bug Type: Documentation problem > > > Operating System: N/A > > > PHP Version: 4.3.7 > > > New Comment: > > > > > > All right, some more investigation shows me that > > when using lower case > > > column names, all works well. When using mixed > > case column names, using > > > a string as the third argument generates the 'Bad > > Column Offset' error. > > > See code snippet below. Note that fieldnames are > > correctly retrieved > > > with pg_field_name(). > > > > > > $db_conn = pg_connect("host = localhost port = > > 5432 dbname = test > > > user = test password = test"); > > > $result = pg_query($db_conn, 'SELECT * FROM > > test'); > > > echo "table column index 0, has a lower case > > name, works > > > fine:<br>\n"; > > > $fieldname = pg_field_name($result, 0); > > > echo "fieldname: $fieldname <br>\n"; > > > $fieldlength = pg_field_prtlen($result, 0, 0); > > > echo "fieldlength: $fieldlength <br>\n"; > > > $fieldlength2 = pg_field_prtlen($result, 0, > > $fieldname); > > > echo "fieldlength: $fieldlength2 <br>\n"; > > > > > > echo '<br>table column index 1, has a mixed > > case name, generates > > > e_notice and empty fieldlength:<br>\n'; > > > $fieldname = pg_field_name($result, 1); > > > echo "fieldname: $fieldname <br>\n"; > > > $fieldlength3 = pg_field_prtlen($result, 0, > > 1); > > > echo "fieldlength: $fieldlength3 <br>\n"; > > > $fieldlength4 = pg_field_prtlen($result, 0, > > $fieldname); > > > echo "fieldlength: $fieldlength4 <br>\n"; > > > > > > You can test the code above at this url: > > > http://212.61.21.72/test/pg_field_prtlen_test.php > > > > > > The database table used in the above code looks > > like this: > > > ============== > > > Welcome to psql 7.3.4-RH, the PostgreSQL > > interactive terminal. > > > > > > You are now connected to database test as user > > test. > > > test=> select * from test; > > > first_column | Second_Column > > > --------------+---------------- > > > 1 | some text > > > 2 | some more text > > > (2 rows) > > > > > > test=> > > > ============ > > > > > > Appearantly it looks like there are two problems: > > the documentation > > > problem, where the possibility to pass an int as > > the third argument is > > > not documented, and the error that occurs when > > using mixed case column > > > names. Should I file the latter as a separate bug? > > > > > > Regards, > > > Bas > > > > > > > > > Previous Comments: > > > > > > ------------------------------------------------------------------------ > > > > > > [2004-07-02 23:17:01] [EMAIL PROTECTED] > > > > > > What I can see in the sources is that the proto > > is: > > > > > > int pg_field_prtlen(resource result, [int row,] > > mixed > > > field_name_or_number > > > > > > > > > Row is optional and the last parameter can be > > either a string or an > > > integer. If it's passed as string, it is > > recongnised as the field name, > > > otherwise as the field number. > > > > > > I've never used PostgreSQL, so can you or somebody > > confirm if the > > > function is behaving as I've stated, please?? > > > > > > Thanks, > > > Nuno > > > > > > > > > ------------------------------------------------------------------------ > > > > > > [2004-07-02 15:50:02] bas at > > vanklinkenbergsoftware dot nl > > > > > > Description: > > > ------------ > > > In the online documentation for pg_field_prtlen, > > the function > > > arguments are described as follows: > > > > > > int pg_field_prtlen (resource result, int > > row_number, string > > > field_name) > > > > > > but actually it should be: > > > > > > int pg_field_prtlen (resource result, int > > row_number, int > > > column_number) > > > > > > (The third argument should be column number > > instead of field name). > > > When using pg_field_prtlen as stated in the online > > documentation, a > > > 'Bad Column Offset' error is generated. -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php