|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2003-12-15 03:32 UTC] gregkiyomi at digitaljunkies dot ca
Description:
------------
When using pg_convert() with PGSQL_CONV_FORCE_NULL option set the resulting value for character data types (text,char,varchar) is set as 'NULL' instead of NULL. This therefore inserts the string 'NULL' into the database instead of the desired NULL value. This also obviously doesn't fail a NOT NULL check as it should.
The culprit is ext/pgsql/pgsql.c
*** pgsql.c~ Mon Dec 15 00:17:01 2003
--- pgsql.c Mon Dec 15 01:28:56 2003
***************
*** 3785,3790 ****
--- 3785,3791 ----
if (Z_STRLEN_PP(val) == 0) {
if (opt & PGSQL_CONV_FORCE_NULL) {
ZVAL_STRING(new_val, "NULL", 1);
+ break;
}
else {
ZVAL_STRING(new_val, empty_string, 1);
This prevents the NULL value from being passed through php_pgsql_add_quotes().
This is also present in php 4.3.3.
Reproduce code:
---------------
$con_str = "host=localhost dbname=database user=user password=pass";
$con = pg_connect($con_str);
$data = array("varchar_field1"=>"test",
"varchar_field2"=>NULL,
"varchar_field3"=>"");
$array = pg_convert($con,"test_table",$data,4);
echo("<pre>");
print_r($array);
echo("</pre>");
Expected result:
----------------
Array
(
[varchar_field1] => 'test'
[varchar_field2] => NULL
[varchar_field3] => NULL
)
Actual result:
--------------
Array
(
[varchar_field1] => 'test'
[varchar_field2] => NULL
[varchar_field3] => 'NULL'
)
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Nov 02 05:00:01 2025 UTC |
The 'corrected' code now puts nothing in for empty strings if PGSQL_CONV_FORCE_NULL is *not* set. It should put '' in. This will break queries. Expected result: ---------------- Array ( [varchar_field1] => 'test' [varchar_field2] => NULL [varchar_field3] => '' ) Actual result: -------------- Array ( [varchar_field1] => 'test' [varchar_field2] => NULL [varchar_field3] => )