我的想法是,我想更新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'
部分。
谢谢
答案 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)
我知道也许这不是解决问题的最佳方法。但它对我有用。