var SelectUser, _ = Database.Prepare("SELECT $1 FROM users WHERE id=$2 LIMIT 1;")
var name string
SelectUser.QueryRow("name", 1).Scan(&name)
如果我喜欢,我收到了错误:
运行时错误:无效的内存地址或无指针取消引用
但是如果列不是变量,那么一切都好。
var SelectUser, _ = Database.Prepare("SELECT name FROM users WHERE id=$1 LIMIT 1;")
var name string
SelectUser.QueryRow(1).Scan(&name)
如何将列作为变量传递?
答案 0 :(得分:0)
您忽略了Database.Prepare
语句的错误。如果您检查错误,您将意识到,它无法准备sql。它失败的原因已经由icza来回答:
答案 1 :(得分:0)
实际上,您不能在查询中使用变量作为字段名称,您必须通过动态查询。
尝试创建一个函数:
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
和你的代码:
var SelectUser, _ = Database.Prepare("SELECT getFieldFromUserById($1,$2 );")
var name string
SelectUser.QueryRow("name", 1).Scan(&name)