Package home | Report new bug | New search | Development Roadmap Status: Open | Feedback | All | Closed Since Version 1.11.5

Bug #4919 ->update sets numeric null cols to zero
Submitted: 2005-07-26 11:42 UTC
From: kuppiel at libero dot it Assigned: alan_k
Status: Closed Package: DB_DataObject
PHP Version: 4.3.11 OS: Linux 2.6.11-gentoo-r11
Roadmaps: (Not assigned)    
Subscription  


 [2005-07-26 11:42 UTC] kuppiel at libero dot it
Description: ------------ As the summary: the update method sets numeric null columns to zero in Postgresql. Zero and null are two very different things... Test script: --------------- $prod = new PoProduct; $prod->get($values['id']); $prod->setFrom($values); $id = $prod->update(); Expected result: ---------------- SQL from DB_DataObject::debugLevel(5) should be INSERT INTO products (supplier , supp_prod_id , prod_name , family , compound_prod , max_discount , valid ) VALUES ( 36 , '' , 'Prova' , null , null , null , 1 ) Actual result: -------------- SQL from DB_DataObject::debugLevel(5) is INSERT INTO products (supplier , supp_prod_id , prod_name , family , compound_prod , max_discount , valid ) VALUES ( 36 , '' , 'Prova' , 0 , 0 , 0 , 1 )

Comments

 [2005-07-26 11:48 UTC] kuppiel at libero dot it
Sorry: DB_DataObject version is 1.7.15.
 [2005-07-26 12:24 UTC] kuppiel at libero dot it
Update: columns' default is not set (and so is null).
 [2005-07-26 14:22 UTC] kuppiel at libero dot it
Solved replacing $this->$col = $value; with $this->$col = is_numeric($value) ? (float) $value : 'null'; at line 3548 in DataObject.php. I know it's quick and dirty but it works for me now. Maybe someone can do it better.
 [2005-07-26 14:29 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!
 [2005-07-26 16:41 UTC] kuppiel at libero dot it
Sorry, the test example should be: $prod = new PoProduct; $prod->setFrom($values); // Could be $_POST $id = $prod->insert(); However the problem is present with updates too. Thank you Alan.
 [2005-07-26 16:53 UTC] kuppiel at libero dot it
var_dump($values) gives array(8) { ["supplier"]=> string(2) "36" ["supp_prod_id"]=> string(0) "" ["prod_name"]=> string(5) "Prova" ["family"]=> string(0) "" ["compound_prod"]=> string(0) "" ["max_discount"]=> string(0) "" ["valid"]=> string(1) "1" ["save"]=> string(5) "Salva" } Thanks again
 [2005-07-26 23:34 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!
 [2005-07-26 23:38 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!
 [2005-07-31 17:41 UTC] kuppiel at libero dot it
"$value = array();" has no sense in my situation, and "$value = array('compound_amount' => '');" has surely problems. Tried with checkEmpty but with no luck. Kamal
 [2005-12-14 13:00 UTC] bjartekv at gmail dot com
Has this issue been solved anywhere? I'm getting similar problems with DB_DataObject 1.7.15 I have a mysql table with the following column definition: grp_id INTEGER(10) UNSIGNED DEFAULT NULL When i insert a new row without setting grp_id it works fine, grp_id is set to NULL. However when i set grp_id to '' (like the empty value from a formbuilder select box) it gets set to 0. Which is fairly annoying considering i want to display an empty field not a 0. I also tried $do->setFrom($values,'%s',true); with no success. my hack around this is: $do->setFrom($form->exportValues()); $do->grp_id = is_numeric($do->grp_id) ? (float) $do->grp_id : 'null'; But its kinda ugly, so any chance this could be implemented? Thanks Bjarte
 [2005-12-20 19:16 UTC] bjartekv at gmail dot com
On second thought, this is perhaps the expected behaviour when inserting an empty string into an integer column. Sorry!
 [2005-12-22 03:19 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!
 [2005-12-29 03:08 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!