I'm trying to get a specific item by ID from my sql server database. Here's my code :
var(
allArticlesQry string = "SELECT * FROM Articles"
findArticlesQry string = "SELECT * FROM Articles WHERE Id = ?1"
)
func FindArticle(w http.ResponseWriter, r *http.Request){
vars := mux.Vars(r)
var id = vars["id"]
var article Article
db := connect()
defer db.Close()
stmt, err := db.Prepare(findArticlesQry)
if err != nil{
log.Fatal(err)
}
defer stmt.Close()
err = stmt.QueryRow(id).Scan(&article.Title, &article.Description, &article.Body, &article.Id)
if err != nil{
log.Fatal(err)
}
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(u.HttpResp{Status: 200, Body: article})
}
I'm using this package for the sqlserver driver and it has this example who should work fine : db.Query("SELECT * FROM t WHERE a = ?3, b = ?2, c = ?1", "x", "y", "z")
But everytime I try to call this function it fails and returns :
2017/09/01 16:31:01 mssql: Incorrect syntax near '?'.
So I don't really understand why my query doesn't work..
EDIT
I tried another way, I removed the part where I prepare the query before executing and now it doesn't crash my server, I have a response but the problem is still the same :
var row = db.QueryRow(findArticlesQry, id).Scan(&article.Title, &article.Description, &article.Body, &article.Id)
And the response :
{
"status": 200,
"description": "",
"body": {
"Number": 102,
"State": 1,
"Class": 15,
"Message": "Incorrect syntax near '?'.",
"ServerName": "DESKTOP-DLROBC4\\LOCALHOST",
"ProcName": "",
"LineNo": 1
}
}
Per your comment, you are using the sqlserver driver, not the mssql driver, so you are using the wrong parameter format. Per the documentation:
The sqlserver driver uses normal MS SQL Server syntax and expects parameters in the sql query to be in the form of either
@Nameor@p1to@pN(ordinal position).
db.QueryContext(ctx, "select * from t where ID = @ID;", sql.Named("ID", 6))
You should therefore change your query to be:
var(
allArticlesQry string = "SELECT * FROM Articles"
findArticlesQry string = "SELECT * FROM Articles WHERE Id = @p1"
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With