我有一些代码在本地GAE服务器上运行良好,但一旦我将其发布到GAE上,它会抛出“driver: bad connection”的错误。
以下代码生成一个新的*sql.DB:
func NewDb() (*sql.DB, error) {
cloud := os.Getenv("dbcloud")
local := os.Getenv("dblocal")
if appengine.IsDevAppServer() {
return sql.Open("mysql", "root@tcp("+local+":3306)/dbo")
}
return sql.Open("mysql", "root@cloudsql("+cloud+")/dbo")
}
在我的app.yaml文件中,我有以下内容:
env_variables:
dbcloud: 'projectid:instancename'
dblocal: 'xxx.xxx.xxx.xxx'
看起来它可以正确返回一个新的 *sql.DB,但一旦我开始使用预处理语句时就会出现问题。
db, err := NewDb() // err is nil
stmt, err := db.Prepare("INSERT INTO dbo.Users (Id) VALUES (?)") // err is driver: bad connection
我已经在为这个问题挣扎了一个小时,可能是我做了什么很愚蠢的事情,请帮忙解决!
"github.com/go-sql-driver/mysql"
) 还是 mymysql driver ("github.com/ziutek/mymysql/godrv"
)? - icza