Edit report at https://bugs.php.net/bug.php?id=46408&edit=1

 ID:                 46408
 Updated by:         yohg...@php.net
 Reported by:        alec at smecher dot bc dot ca
 Summary:            Locale number format settings can cause
                     pg_query_params to break with numerics
 Status:             Wont fix
 Type:               Bug
 Package:            PostgreSQL related
 Operating System:   *
 PHP Version:        5.*, 6
 Assigned To:        yohgaki
 Block user comment: N
 Private report:     N

 New Comment:

>PostgreSQL is hard-coded to parse numeric values using "." as the decimal 
>point 
(see 
>https://github.com/postgres/postgres/blob/master/src/backend/utils/adt/numeric.
>c in set_var_from_str for implementation).

The number *may* be a string, what we should do then?

Is it "3.5" or "3,5"? Only the PHP programmer who is writing the code knew 
which 
should be. Therefore, this won't fix.


Previous Comments:
------------------------------------------------------------------------
[2012-04-17 19:52:49] alec at smecher dot bc dot ca

PostgreSQL is hard-coded to parse numeric values using "." as the decimal point 
(see 
https://github.com/postgres/postgres/blob/master/src/backend/utils/adt/numeric.c
 in set_var_from_str for implementation).

This agrees with the SQL92 grammar for a numeric literal:
http://savage.net.au/SQL/sql-92.bnf.html#exact%20numeric%20literal

...so by my reading PHP needs fixing.

------------------------------------------------------------------------
[2012-04-17 19:33:10] yohg...@php.net

I've tried different locale see if it works and it doesn't.

I also found this
http://www.postgresql.org/docs/8.4/static/locale.html
So , cannot replaced by .

There is other case transparent usage is not allowed. Money is one of them.
http://www.postgresql.org/docs/8.4/static/datatype-money.html

If postgres is going to support conversion, then it is going to work, since it 
requires server side settings to work. (i.e. Database initialization, table 
definition) It is not a bug or feature that should be fixed in PHP.

It's possible to do locale conversion in module, it would not be a good idea in 
general.

------------------------------------------------------------------------
[2012-04-17 16:22:31] alec at smecher dot bc dot ca

yohgaki, I'm not sure I'm following, but to be clear: the bug entry is not 
about whether the output is 3,5 or 3.5. The bug is that PostgreSQL throws a 
syntax error when passing a floating-point number into a parameterized query. 
See RhodiumToad's quoted comment.

You're quoting the following psql query:
select 123456789.12345::text::numeric;

What I'm trying to point out is this:
select 123456789,12345::text::numeric;

------------------------------------------------------------------------
[2012-04-17 08:21:43] yohg...@php.net

It seems it does not work that way.

http://www.postgresql.org/docs/8.4/static/locale.html
Check that PostgreSQL is actually using the locale that you think it is. The 
LC_COLLATE and LC_CTYPE settings are determined when a database is created, and 
cannot be changed except by creating a new database. Other locale settings 
including LC_MESSAGES and LC_MONETARY are initially determined by the 
environment the server is started in, but can be changed on-the-fly. You can 
check the active locale settings using the SHOW command.


You may get currency as your locale setting, but not numbers.

yohgaki@[local] ~=# select 123456789.12345::text::money;
          money           
--------------------------
 EUR12.345.678.912.345,00

yohgaki@[local] ~=# select 123456789.12345::text::numeric;
     numeric     
-----------------
 123456789.12345

PHP's pgsql is getting all data as string. If there is a method that returns 
numbers as you expected, then you'll get your outputs needed. Can do that in 
PHP.

------------------------------------------------------------------------
[2012-03-31 05:43:17] yohg...@php.net

I guess setting locale to database locale resolve this issue.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=46408


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=46408&edit=1

Reply via email to