var SelectUser, _ = Database.Prepare("SELECT $1 FROM users WHERE id=$2 LIMIT 1;")
var name string
SelectUser.QueryRow("name", 1).Scan(&name)
If i do like that i got an error:
runtime error: invalid memory address or nil pointer dereference
But if column is not variable, all ok.
var SelectUser, _ = Database.Prepare("SELECT name FROM users WHERE id=$1 LIMIT 1;")
var name string
SelectUser.QueryRow(1).Scan(&name)
How can I pass columns as variables?
You are ignoring the error of the Database.Prepare
statement. If you check the error you will realise, that it fails preparing the sql. The reason why it fails was already answered here by icza:
Effectively , you can't use variable as field name in a query , you have to pass by a dynamic query.
Try creating a function :
CREATE OR REPLACE FUNCTION getFieldFromUserById(field_name character varying, id_user integer)
RETURNS SETOF character varying AS
$BODY$begin
return query execute 'SELECT '||field_name||' FROM users WHERE nart='||id_user||' LIMIT 1';
end
$BODY$
LANGUAGE plpgsql VOLATILE
and your code :
var SelectUser, _ = Database.Prepare("SELECT getFieldFromUserById($1,$2 );")
var name string
SelectUser.QueryRow("name", 1).Scan(&name)