He estado tratando de conectar mysql con ir, pero puedo parecer para tener éxito. Sólo estoy tratando de obtener un valor de la tabla y establecer variable e imprimir. Lo que me falta tal vez sólo algo obvio

esto es a partir de la base de datos denominada bankdata

mysql> select * from accounts ;
+----+----------+-----------------+----------+---------+
| id | username | email           | facebook | twitter |
+----+----------+-----------------+----------+---------+
|  1 | user1    | [email protected].com | userfb1  | NULL    |
|  2 | user2    | [email protected].com | NULL     | NULL    |
|  3 | user3    | [email protected].com | NULL     | NULL    |
+----+----------+-----------------+----------+---------+

hay dos pilotos que he usado, y me parecen entender lo equivocado con ambos

utilizando ir-sql-controlador

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)
}

devuelve

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

la contraseña es en realidad a la derecha, para el usuario root y bankadmin, y el mysql en ejecución en el puerto 3306. Pero, de nuevo, si puedo cambiar el DB_HOST a «tcp(127.0.0.1:3000)» o cambiar el 127.0.0.1 localhost, me dio el mismo error.

utilizando mymysql conductor

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/ziutek/mymysql/godrv"
    "log"
    "strconv"
)

const (
    DB_HOST = "tcp(127.0.0.1:3306)"
    DB_NAME = "bankdata"
    DB_USER = "bankadmin"
    DB_PASS = "1234"
)

type User struct {
    Id       int    
    Username string 
    Email    string 
    Facebook string
}

func OpenDB() *sql.DB {
    db, err := sql.Open("mymysql", fmt.Sprintf("%s/%s/%s", DB_NAME, DB_USER, DB_PASS))
    if err != nil {
        panic(err)
        log.Fatal(err)
    }
    return db
}

func UserById(id int) *User {
    db := OpenDB()
    defer db.Close()
    row := db.QueryRow("SELECT id, username, email FROM accounts WHERE id=?", id)
    user := new(User)
    row.Scan(&user.Id, &user.Username, &user.Email, &user.Facebook)
    return user
}

func main() {
    db := OpenDB()
    defer db.Close()
    row := db.QueryRow("SELECT id, username, email, facebook FROM accounts WHERE id=2")
    user := new(User)
    row.Scan(&user.Id, &user.Username, &user.Email, &user.Facebook)
    fmt.Println("id    : " + strconv.Itoa(user.Id) + "\nname  : " + user.Username + "\nemail : \n" + user.Email)

}

devuelve:

D:\_>go run dbtest.go
id    : 0
name  :
email :

parece que tanto el id y las cadenas está vacío, como nunca recibió cualquier valores de la fila.Función de escaneo. Y no sé cómo asegurarse de que están conectados, incluso a pesar de que no me da el mismo error que el anterior controlador

Oh, y estoy usando Windows 7, MySQL 5.5.8 que viene con WAMP.

Si cometí algún error en este post, que me perdonen. Este es mi primer post.

  • asegúrese de que su usuario es bankadmin y la contraseña es 1234
  • esto es lo que está escrito en mysql cmd mysql> drop database if exists bankdata; Query OK, 1 row affected (1.28 sec) mysql> create database bankdata; Query OK, 1 row affected (0.00 sec) mysql> grant all privileges on bankdata.* to 'bankadmin'@'localhost' identified by '1234'; Query OK, 0 rows affected (0.09 sec) mysql> flush privileges; Query OK, 0 rows affected (0.12 sec) mysql> use bankdata; Database changed
  • Es el Go-MySQL-Conductor hasta la fecha? Podría ser este error: github.com/go-sql-driver/mysql/issues/35 en caso Contrario, como el Barón Schwartz dijo: This is a really common problem with MySQL in general. There's probably a .01% chance this is a problem in the driver. See http://dev.mysql.com/doc/refman/5.1/en/access-denied.html and look especially at the portions that discuss what happens when you have default privileges in the privilege tables. In your case you probably have a mismatch between the hostname defined for the user in the privileges table, and the hostname used for authentication.
  • Y por favor, tenga en cuenta que la ruta de acceso del paquete cambiado a github.com/go-sql-driver/mysql (todo en minúsculas)
InformationsquelleAutor Joni Atif | 2013-03-29

2 Comentarios

  1. 2

    El problema no está en su código el problema es de configuración de mysql. Usted puede tener el nombre de usuario correcto y la contraseña pero probablemente usted no ha autorizado que el usuario se conecte a la base de datos utilizando tcp.

  2. 0

    Cómo conectarse a mysql con ir?

    Como lo menciona @Jeremy pared, el problema fue con la cadena de conexión. El nombre de usuario es incorrecto. Para configurar los ajustes,
    1. Ir a la opción de «Servidor»
    2. Seleccione Administrar Conexiones De Servidor
    3. seleccione la sección Conexiones de
    4. Haga clic en guardar en el llavero botón en la sección contraseña e introduzca la nueva contraseña

    está todo listo. ahora intente el botón probar conexión. Funcionó para mí cuando traté de acceder a la base de datos de IR del programa.

Dejar respuesta

Please enter your comment!
Please enter your name here