function object_update($data, $filter, &$object) { if (count((array) $data) == 0) { return true; } $result = $object->db->exec('select * from ' . $object->tableName . ' where 0=1'); $col_count = mysql_num_fields($result['rs']); $columnsList =& $object->_columns(); for ($i = 0; $i < $col_count; $i++) { $column = mysql_fetch_field($result['rs'], $i); if (isset($data[$column->name])) { if ($column->type == 'unknown') { $column->type = 'real'; //PHP_BUG http://bugs.php.net/bug.php?id=36069 } if (!$columnsList[$column->name]['default'] && $columnsList[$column->name]['required'] && $data[$column->name] === null) { trigger_error($columnsList[$column->name]['label'] . '(' . $column->name . __(')不能为空。'), E_USER_WARNING); $GLOBALS['php_errormsg'] = $php_errormsg; return false; } if ($columnsList[$column->name]['vtype'] == 'positive' && $data[$column->name] < 0) { trigger_error($columnsList[$column->name]['label'] . '(' . $column->name . __(')一定要为正数。'), E_USER_WARNING); $GLOBALS['php_errormsg'] = $php_errormsg; return false; } if ($columnsList[$column->name]['default'] && $data[$column->name] === "") { $data[$column->name] = $columnsList[$column->name]['default']; } $UpdateValues[] = '`' . $column->name . '`=' . db_quotevalue($object->db, $data[$column->name], $column->type); } } if (count($UpdateValues) > 0) { $sql = 'update ' . $object->tableName . ' set ' . implode(',', $UpdateValues) . ' where ' . $object->_filter($filter); if ($object->db->exec($sql)) { if ($object->db->affect_row()) { return $object->db->affect_row(); } else { return true; } } else { return false; } } }
function db_get_insert_sql($db, &$rs, &$data, $autoup = false) { if (!$rs['rs']) { trigger_error('GetInsertSQL: ' . $rs['sql'] . ' error ', E_USER_WARNING); return false; } mysql_field_seek($rs['rs'], 0); if (is_object($data)) { $data = get_object_vars($data); } foreach ($data as $key => $value) { $data[strtolower($key)] = $value; } if (preg_match('/FROM\\s+([]0-9a-z_:"`.@[-]*)/is', $rs['sql'], $tableName)) { $tableName = $tableName[1]; } if ($autoup) { $keyColumn = mysql_fetch_field($rs['rs']); if (!$data[strtolower($keyColumn->name)]) { $rs = $db->exec('SELECT MAX(' . $keyColumn->name . ') AS keyid FROM ' . $tableName); $result = $db->selectrow('SELECT MAX(' . $keyColumn->name . ') AS keyid FROM ' . $tableName); $data[$keyColumn->name] = $result['keyid'] + 1; } } $insertValues = array(); $col_count = mysql_num_fields($rs['rs']); for ($i = 0; $i < $col_count; $i++) { $column = mysql_fetch_field($rs['rs'], $i); if (isset($data[$column->name])) { $insertValues[$column->name] = db_quotevalue($db, $data[$column->name], $column->type); } } $strValue = implode(',', $insertValues); $strFields = implode('`,`', array_keys($insertValues)); mysql_field_seek($rs['rs'], 0); return 'INSERT INTO `' . $tableName . '` ( `' . $strFields . '` ) VALUES ( ' . $strValue . ' )'; }