将字符串传递给Golang中的预准备语句

时间:2017-07-05 12:09:24

标签: string postgresql go prepared-statement

我的想法是,我想更新status并仅在status不同时才返回ID。

所以,我有这样一个准备好的声明:

var theQuery = `UPDATE process SET status=$1 WHERE status!=$1 AND id=$2 RETURNING id`

然后,我用它来称呼它:

err = statement.QueryRow("set", 12).Scan(&id)

然后会出现这样的错误。

runtime error: invalid memory address or nil pointer dereference

当我尝试时:

var theQuery = `UPDATE process SET status='$1' WHERE status!='$1' AND id=$2 RETURNING id`

它运行。然后,当我再次运行它时,我希望得到no rows,但它仍然返回id。看起来它仍然在更新行并忽略了status!='$1'部分。

谢谢

1 个答案:

答案 0 :(得分:1)

所以,我找到了解决方案。准备好的语句不会使用$1两次,而是会收到3个参数:

var theQuery = `UPDATE process SET status=$1 WHERE status!=$2 AND id=$3 RETURNING id`

然后,我像这样调用准备好的声明。

status := "set"
err = statement.QueryRow(status, status, 12).Scan(&id)

我知道也许这不是解决问题的最佳方法。但它对我有用。