如题:
// autoReplace public function autoReplace($table, $field_values, $update_values, $where = '') { $field_descs = $this->getAll('DESC ' . $table); // primary key | fields $primary_keys = $field_names = array(); foreach ($field_descs as $value) { $field_names[] = $value['Field']; if ($value['Key'] == 'PRI') { $primary_keys[] = $value['Field']; } } // action fields $fields = $values = array(); foreach ($field_names as $value) { if (array_key_exists($value, $field_values) ) { $fields[] = $value; $values[] = "'" . $field_values[$value] . "'"; } } // sets $sets = array(); foreach ($update_values as $key => $value) { if (array_key_exists($key, $field_values) ) { if (is_int($value) || is_float($value)) { $sets[] = $key . ' = ' . $key . ' + ' . $value; } else { $sets[] = $key . " = '" . $value . "'"; } } } // not exists primary key if (empty($primary_keys) && !empty($fields)) { $sql = 'INSERT INTO ' . $table . '(' . implode(', ', $fields) . ') VALUES(' . implode(', ', $values) . ')'; } else { if ($this->version() >= 40102) { $sql = 'INSERT INTO '. $table .'('. implode(',', $fields) .') VALUES('. implode(',', $values) .')'; if (!empty($sets)) { $sql .= ' ON DUPLICATE KEY UPDATE '. implode(',', $sets); } } else { // where if (empty($where)) { $where = array(); foreach ($primary_keys as $key) { $where[] = $key = "'". $field_values[$key] ."'" ; } $where = implode(' AND ', $where); } if (!empty($where) && (!empty($sets) || !empty($fields))) { if (intval($GLOBALS['db']->getOne("SELECT COUNT(*) FROM $table WHERE $where")) > 0) { if (!empty($sets)) { $sql = 'UPDATE '. $table .' SET '. implode(',', $sets) .' WHERE '. $where; } } else { if (!empty($fields)) { $sql = 'REPLACE INTO '. $table .'('. implode(',', $fields) .') VALUES('. implode(',', $values) .')'; } } // else } } // else } // end if return empty($sql) ? false : $this->query($sql); }
已经重写过MySQL类(使用MySQLi方法),需要者Email:ljlwill@gmail.com。