Soy nuevo en ir lang. Quiero crear una verificación de inicio de sesión de base de datos MySQL.
Quiero un método como en PHP mysqli_num_rows($res)==1
Traté de len(rows) o rows.Column() @fmt.Println("No of rows are :",rows) pero no…
El código que he probado … (es un código ficticio)

rows, err := db.Query("select * from userLog where u_name = ? and u_pass = ?", uname,pswd)
  if err != nil {
     log.Fatal(err)
   }
   fmt.Println("No of rows are :",rows)
   defer rows.Close()

Si usted tiene otra solución para la verificación de inicio de sesión propósito, a continuación, sugerimos y explicar brevemente Amablemente me ayude a cabo.

6 Comentarios

  1. 7

    Como entiendo que usted necesita para comprobar si el usuario y la contraseña que existen en la base de datos. Si por lo que usted puede hacer:

    var isAuthenticated bool
    err := db.QueryRow("SELECT IF(COUNT(*),'true','false') FROM userLog WHERE u_name = ? AND u_pass = ?", uname, pswd).Scan(&isAuthenticated)
    if err != nil {
        log.Fatal(err)
    } 

    Si la base de datos contiene suministrado usuario y contraseña isAuthenticated se establece en verdadero.

    • tenga en cuenta que esto funciona para MySQL, pero otras bases de datos como sqlite no apoyo ‘SI’.
  2. 5

    Si ya ha ejecutado una consulta db.Query("SELECT * FROM some_tbl") y tienen un rows iterador, entonces usted no puede extraer el número de filas sin iterar a través de ella. Como se puede ver no hay nada que devuelve el número de filas.

    Así que la única cosa que usted puede hacer es hacer una consulta para seleccionar el número de filas: db.Query("SELECT COUNT(*) FROM some_tbl")

  3. 3

    Aquí es bastante eficiente para devolver el número de filas en una base de datos MySQL seleccione en ir:

    rows, selerr := db.Query(sql, StartDate,EndDate) //Query
                    if selerr != nil { fmt.Fprint(w, selerr); return }
    count := 0
    for rows.Next() { count += 1 }
    
    rows, _ := db.Query(sql, StartDate,EndDate) //Query again - no error 
    • estoy de acuerdo, esta es una buena solución, especialmente si no tenemos la flexibilidad para modificar la consulta select * a select count(*)
  4. 2

    Como se ha mencionado, count(*) funciona bien y Exploración hace que sea más sencillo todavía, por ejemplo:

    func GetCount(schemadottablename string) int {
        var cnt int
        _ = db.QueryRow(`select count(*) from ` + schemadottablename).Scan(&cnt)
        return cnt 
    }

    Puede utilizar, por supuesto, esto con un lugar de instrucción para «refinar» la cuenta, por ejemplo:

    func GetCount(schemadottablename string, column string, value string) int {
        var cnt int
        _ = db.QueryRow(`select count(` + column + `) from ` + schemadottablename + ` where ` + column + `=?`, value).Scan(&cnt)
        return cnt 

    }

    • Que es exactamente lo que usted NUNCA debe hacer. No combine las sentencias SQL a ti mismo, siempre el uso de declaraciones preparadas que son auto aplicado en la mayoría de las funciones de SQL implementado en Ir. por ejemplo: db.QueryRow("SELECT id, description FROM status WHERE id = ?", user.StatusID)
    • Unirse a la cadena de la instrucción a sí mismo es altamente vulnerable a los Inyecciones de SQL!
    • Hay una ortodoxia desarrollo en esta área, que se está convirtiendo en muy estridente. Si las manipulaciones que intervienen en el montaje de una instrucción SQL están completamente dentro del programa, no hay más probabilidad de que la inyección que hay de que el programador mediante una errónea o malintencionada valor a través de un comunicado. En mi experiencia, algunas declaraciones preparadas no funcionan con complejo SDQ declaración de la asamblea. Sí, si no son de confianza entrada está involucrado, no sólo el uso de declaraciones preparadas, pero incluso entonces no dependen de ellos por completo. Si la confianza de entrada, por lo que usar la cabeza.
  5. 0

    El idioma de la aplicación no hacen diferentes. Uso count(*):

    select count(*) as cnt
    from userLog
    where u_name = ? and u_pass = ?;

    A continuación, leer el valor que devuelve la consulta.

    • Ya he usado … es devolver la dirección … No of rows are : &{0xc82001a060 0x6b6d0 0xc82000e260 false [] <nil> 0xc8200141b0}
    • Tienen que leer la documentación sobre cómo leer los resultados de una consulta? go-database-sql.org/retrieving.html
  6. 0

    Sólo para añadir un poco de perspectiva en este tema, ¿has pensado en como tener una receta general que le permite expresar cualquier instrucción select into select count(*), que podría ser útil en la paginación de los asuntos y esperemos que en lo que alguien está buscando:

    package main
    
    import (
        "fmt"
        "regexp"
    )
    
    const sample = `select a,b,c
    from <table>
    where <conditions>`
    
    func main() {
        var re = regexp.MustCompile(`(select)\b.[\s\S]*(from[\s\S]*)`)
        s := re.ReplaceAllString(sample, "$1 count(*)\n$2")
        fmt.Println(sample + "\n")
        fmt.Println(s)
    }

    https://play.golang.org/p/29Iiv1Ta-0_D

Dejar respuesta

Please enter your comment!
Please enter your name here