diff --git a/util/sqlutil/main.go b/util/sqlutil/main.go
index beac4c8907ad86c3a5c5c7e00cd6b9e098950d0c..8da4bd76599845f151f46afeaebad3606dcb9044 100644
--- a/util/sqlutil/main.go
+++ b/util/sqlutil/main.go
@@ -44,7 +44,7 @@ type QueryChunks struct {
 	Offset     string
 	Sort       string
 	Conditions string
-	Arguments  []string
+	Arguments  []interface{}
 }
 
 func (self *T) ColumnLike(s string) string {
@@ -188,6 +188,9 @@ func (self *T) FetchRow(dst interface{}, rows *sql.Rows) error {
 	next := rows.Next()
 
 	if next == false {
+		if err = rows.Err(); err != nil {
+			return err
+		}
 		return db.ErrNoMoreRows
 	}
 
@@ -249,10 +252,10 @@ func (self *T) FetchRows(dst interface{}, rows *sql.Rows) error {
 	return nil
 }
 
-func (self *T) FieldValues(item interface{}, convertFn func(interface{}) string) ([]string, []string, error) {
+func (self *T) FieldValues(item interface{}, convertFn func(interface{}) interface{}) ([]string, []interface{}, error) {
 
 	fields := []string{}
-	values := []string{}
+	values := []interface{}{}
 
 	itemv := reflect.ValueOf(item)
 	itemt := itemv.Type()
@@ -262,7 +265,7 @@ func (self *T) FieldValues(item interface{}, convertFn func(interface{}) string)
 	case reflect.Struct:
 		nfields := itemv.NumField()
 
-		values = make([]string, 0, nfields)
+		values = make([]interface{}, 0, nfields)
 		fields = make([]string, 0, nfields)
 
 		for i := 0; i < nfields; i++ {
@@ -313,7 +316,7 @@ func (self *T) FieldValues(item interface{}, convertFn func(interface{}) string)
 		}
 	case reflect.Map:
 		nfields := itemv.Len()
-		values = make([]string, nfields)
+		values = make([]interface{}, nfields)
 		fields = make([]string, nfields)
 		mkeys := itemv.MapKeys()