我一直在尝试用 go 连接 mysql,但我似乎可以成功。我只是想从表中获取一个值并将其设置为变量并打印它。我错过的也许只是一些明显的东西
这是来自名为 bankdata 的数据库
mysql> select * from accounts ;
+----+----------+-----------------+----------+---------+
| id | username | email | facebook | twitter |
+----+----------+-----------------+----------+---------+
| 1 | user1 | email1@mail.com | userfb1 | NULL |
| 2 | user2 | email2@mail.com | NULL | NULL |
| 3 | user3 | email3@mail.com | NULL | NULL |
+----+----------+-----------------+----------+---------+
我使用了两个驱动程序,我似乎明白他们两个都有什么问题
使用go-sql-driver
package main
import (
"database/sql"
_ "github.com/Go-SQL-Driver/MySQL"
"log"
)
const (
DB_HOST = "tcp(127.0.0.1:3306)"
DB_NAME = "bankdata"
DB_USER = /*"root"*/ "bankadmin"
DB_PASS = /*""*/ "1234"
)
func main() {
dsn := DB_USER + ":" + DB_PASS + "@" + DB_HOST + "/" + DB_NAME + "?charset=utf8"
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal(err)
}
defer db.Close()
var str string
q := "select username from bankadmin.accounts where id = 1"
err = db.QueryRow(q).Scan(&str)
if err != nil {
log.Fatal(err)
}
log.Println(str)
}
这返回
D:\_>go run dbtest.go
2013/03/29 13:14:11 Error 1045: Access denied for user 'bankadmin'@'localhost'
(using password: YES)
exit status 1
密码实际上是正确的,对于用户 root 和 bankadmin 以及在端口 3306 中运行的 mysql。但话又说回来,如果我将 DB_HOST 更改为“tcp(127.0.0.1:3000)”或将 127.0.0.1 更改为localhost,它给了我同样的错误。
这将返回:
D:\_>go run dbtest.go
id : 0
name :
email :
它看起来像 id 和字符串都是空的,就像它从未从 row.Scan 函数收到任何值一样。而且我不知道如何确保它们已连接,即使它们没有给我与以前的驱动程序相同的错误
哦,我正在使用 WAMP 附带的 Windows 7、MySQL 5.5.8。
如果我在这篇文章中犯了任何错误,请原谅我。这是我的第一篇文章。
12345678_0001
相关分类