Index: branches/unlabeled/unlabeled-1.30.2/core/kernel/db/dbitem.php =================================================================== diff -u -r7725 -r7829 --- branches/unlabeled/unlabeled-1.30.2/core/kernel/db/dbitem.php (.../dbitem.php) (revision 7725) +++ branches/unlabeled/unlabeled-1.30.2/core/kernel/db/dbitem.php (.../dbitem.php) (revision 7829) @@ -323,7 +323,7 @@ { $skip = false; $skip = $skip || ( isset($this->VirtualFields[$field_name]) ); //skipping 'virtual' field - $skip = $skip || ( !getArrayValue($this->FieldValues, $field_name) && getArrayValue($this->Fields[$field_name], 'skip_empty') ); //skipping 'virtual' field + $skip = $skip || ( !getArrayValue($this->FieldValues, $field_name) && getArrayValue($this->Fields[$field_name], 'skip_empty') ); //skipping marked field with 'skip_empty' // $skip = $skip || ($field_name == $this->IDField && !$force_id); //skipping Primary Key // $table_name = preg_replace("/^(.*)\./", "$1", $field_name); @@ -675,38 +675,43 @@ $fields_sql = ''; $values_sql = ''; - foreach ($this->FieldValues as $field_name => $field_value) - { + foreach ($this->FieldValues as $field_name => $field_value) { if ($this->SkipField($field_name, $force_id)) continue; - - $fields_sql .= sprintf('`%s`, ',$field_name); //Adding field name to fields block of Insert statement - //Adding field' value to Values block of Insert statement, escaping it with ADODB' qstr - if (is_null( $this->FieldValues[$field_name] )) - { - if (isset($this->Fields[$field_name]['not_null']) && $this->Fields[$field_name]['not_null']) - { - $values_sql .= $this->Conn->qstr($this->Fields[$field_name]['default']).', '; + + //Adding field' value to Values block of Insert statement, escaping it with qstr + if (is_null( $this->FieldValues[$field_name] )) { + if (isset($this->Fields[$field_name]['not_null']) && $this->Fields[$field_name]['not_null']) { + if ($field_name == $this->IDField) { + $values_sql .= 'DEFAULT'; + } + else { + $values_sql .= $this->Conn->qstr($this->Fields[$field_name]['default'], 0); + } } - else - { - $values_sql .= 'NULL, '; + else { + $values_sql .= 'NULL'; } } - else - { - $values_sql .= sprintf('%s, ',$this->Conn->qstr($this->FieldValues[$field_name], 0)); + else { + $values_sql .= $this->Conn->qstr($this->FieldValues[$field_name], 0); } + + $fields_sql .= '`'.$field_name.'`, '; //Adding field name to fields block of Insert statement + $values_sql .= ', '; } //Cutting last commas and spaces $fields_sql = ereg_replace(", $", '', $fields_sql); $values_sql = ereg_replace(", $", '', $values_sql); $sql = sprintf('INSERT INTO %s (%s) VALUES (%s)', $this->TableName, $fields_sql, $values_sql); //Formatting query //Executing the query and checking the result - if($this->Conn->ChangeQuery($sql) === false) return false; + if ($this->Conn->ChangeQuery($sql) === false) return false; $insert_id = $this->Conn->getInsertID(); - if($insert_id == 0) $insert_id = $this->FieldValues[$this->IDField]; + if ($insert_id == 0) { + // insert into temp table (id is not auto-increment field) + $insert_id = $this->FieldValues[$this->IDField]; + } $this->setID($insert_id); if (!$system_create){ @@ -855,7 +860,7 @@ */ function GetID() { - return $this->ID; + return is_null($this->ID) ? $this->Fields[$this->IDField]['default'] : $this->ID; } /** @@ -866,7 +871,7 @@ */ function generateID() { - return 0; + return null; } /**