postgres准备查询,列作为变量

时间:2016-07-18 12:20:03

标签: postgresql go

    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)

如何将列作为变量传递?

2 个答案:

答案 0 :(得分:0)

您忽略了Database.Prepare语句的错误。如果您检查错误,您将意识到,它无法准备sql。它失败的原因已经由icza来回答:

Golang ORDER BY issue with MySql

答案 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)