I have a problem with the argument-interface and strings on query.
var stuff = []interface{}{}
....
query = "SELECT intern_NR, Bezeichnung FROM sv_seminare ORDER BY Bezeichnung ? LIMIT ?,?"
stuff = []interface{}{order, offset, limit}
...
rows, err := db.Query(query, stuff...)
order is are string, offset & limit integer.
Error:
Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘? LIMIT ?,?’ at line 1
My log:
2016/10/02 18:37:35 SELECT intern_NR, Bezeichnung FROM sv_seminare ORDER BY Bezeichnung ? LIMIT ?,?
2016/10/02 18:37:35 [asc 0 10]
If I remove the order it runs without errors, but whenever i use a string in my interface FAILLLLLL
ORDER BY can be using for any fields.
You want to use Bezeichnung constantly as first order clause and want to bind the variable as the second field.
Then query can be like
ORDER BY Bezeichnung, ? - ORDER BY Bezeichnung THEN ORDER BY binding variable
`SELECT intern_NR, Bezeichnung FROM sv_seminare WHERE Bezeichnung LIKE ‘%?%’ ORDER BY Bezeichnung, ? LIMIT ?,?`
instead
“SELECT intern_NR, Bezeichnung FROM sv_seminare WHERE Bezeichnung LIKE ‘%?%’ ORDER BY Bezeichnung, ? LIMIT ?,?”
log.Println(order, offset, limit, search)
if search != "" {
query = "SELECT intern_NR, Bezeichnung FROM sv_seminare WHERE Bezeichnung LIKE '%?%' ORDER BY Bezeichnung, ? LIMIT ?,?"
stuff = []interface{}{search, order, offset, limit}
} else {
query = "SELECT intern_NR, Bezeichnung FROM sv_seminare ORDER BY Bezeichnung ,? LIMIT ?,?"
stuff = []interface{}{order, offset, limit}
}
log.Println(query)
log.Println(stuff)
rows, err := db.Query(query, stuff...)