[MYSQL-41-2] no aparecen los dialogos de registro
#1

Hasta ahora no me habнa animado a usar MySQL, estoy siguiendo un tutorial de un registro y login (en inglйs) pero resulta que no aparecen los dialogos o no hace la consulta.

— La base de datos si conecta
— Deberнan salir los dialogos cuando se conecta
— Usando la ъltima versiуn, actualizado Plugin e Include.

Link del registro (solo tiene 140 lineas)

їCuбles son mis fallos?

Quote:
Originally Posted by errors.log
[14:00:07] [plugins/mysql] error #1064 while executing query "SELECT 'clave', 'id' FROM 'cuentas' WHERE nombre = 'Granat3' LIMIT 1": You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''cuentas' WHERE nombre = 'Granat3' LIMIT 1' at line 1
Quote:
Originally Posted by mysql.log
[13:59:37] [INFO] changed log level from 'warning, error' to 'debug, info, warning, error'
[13:59:37] [DEBUG] mysql_connect("localhost", "root", "*****", "myserver", 0)
[13:59:37] [DEBUG] CHandleManager::Create(this=0x29a2c8, host='localhost', user='root', pass='****', db='myserver', options=0x2963b8 )
[13:59:37] [INFO] Creating new connection handle...
[13:59:37] [WARNING] mysql_connect: no password specified
[13:59:37] [DEBUG] CConnection::CConnection(this=0x2a7298, host='localhost', user='root', passw='****', db='myserver', options=0x2963b8 )
[13:59:37] [DEBUG] CConnection::CConnection - new connection = 0x270a18
[13:59:37] [DEBUG] CConnection::CConnection(this=0x2f50020, host='localhost', user='root', passw='****', db='myserver', options=0x2963b8 )
[13:59:37] [DEBUG] CConnection::CConnection - new connection = 0x2abcc0
[13:59:37] [DEBUG] CThreadedConnection::WorkerFunc(this=0x2f50020, connection=0x2f50020)
[13:59:37] [DEBUG] CThreadedConnection::CThreadedConnection(this=0x2f 50020, connection=0x2f50020)
[13:59:37] [DEBUG] CConnectionPool::CConnectionPool(size=2, this=0x27106
[13:59:37] [DEBUG] CConnection::CConnection(this=0x30e0020, host='localhost', user='root', passw='****', db='myserver', options=0x2963b8 )
[13:59:37] [DEBUG] CConnection::CConnection - new connection = 0x2bc4f0
[13:59:37] [DEBUG] CThreadedConnection::WorkerFunc(this=0x30e0020, connection=0x30e0020)
[13:59:37] [DEBUG] CThreadedConnection::CThreadedConnection(this=0x30 e0020, connection=0x30e0020)
[13:59:37] [DEBUG] CConnection::CConnection(this=0x3270020, host='localhost', user='root', passw='****', db='myserver', options=0x2963b8 )
[13:59:37] [DEBUG] CConnection::CConnection - new connection = 0x2c8448
[13:59:37] [DEBUG] CThreadedConnection::WorkerFunc(this=0x3270020, connection=0x3270020)
[13:59:37] [DEBUG] CThreadedConnection::CThreadedConnection(this=0x32 70020, connection=0x3270020)
[13:59:37] [INFO] Connection handle with id '1' successfully created.
[13:59:37] [DEBUG] CHandleManager::Create - new handle = 0x290e70
[13:59:37] [DEBUG] mysql_connect: return value: '1'
[13:59:37] [DEBUG] mysql_errno(1)
[13:59:37] [DEBUG] CHandle::GetErrorId(this=0x290e70)
[13:59:37] [DEBUG] CConnection::GetError(this=0x2a7298, connection=0x270a1
[13:59:37] [DEBUG] CHandle::GetErrorId - return value: true, error id: '0', error msg: ''
[13:59:37] [DEBUG] mysql_errno: return value: '0'
[14:00:07] [DEBUG] mysql_format(1, 0x021D2720, 150, "SELECT 'clave', 'id' FROM 'cuentas' WHERE nombre = '%s' LIMIT 1")
[14:00:07] [DEBUG] mysql_format: return value: '68'
[14:00:07] [DEBUG] mysql_tquery(1, "SELECT 'clave', 'id' FROM 'cuentas' WHERE nombre = 'Granat3' LIMIT 1", "CheckCuenta", "i")
[14:00:07] [DEBUG] CCallback::Create(amx=0x176a728, name='CheckCuenta', format='i', params=0x21d26a8, param_offset=5)
[14:00:07] [DEBUG] CCallback::Create - callback index for 'CheckCuenta': 0
[14:00:07] [DEBUG] processing specifier 'i' with parameter index 0
[14:00:07] [DEBUG] retrieved and pushed value '0'
[14:00:07] [INFO] Callback 'CheckCuenta' set up for delayed execution.
[14:00:07] [DEBUG] created delayed callback with 1 parameter
[14:00:07] [DEBUG] CHandle::Execute(this=0x290e70, type=1, query=0x2d57d0)
[14:00:07] [DEBUG] CConnection::Execute(query=0x2d57d0, this=0x2f50020, connection=0x2abcc0)
[14:00:07] [DEBUG] CQuery::Execute(this=0x2d57d0, connection=0x2abcc0)
[14:00:07] [ERROR] error #1064 while executing query "SELECT 'clave', 'id' FROM 'cuentas' WHERE nombre = 'Granat3' LIMIT 1": You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''cuentas' WHERE nombre = 'Granat3' LIMIT 1' at line 1
[14:00:07] [DEBUG] CConnection::GetError(this=0x2f50020, connection=0x2abcc0)
[14:00:07] [DEBUG] CHandle::Execute - return value: true
[14:00:07] [DEBUG] mysql_tquery: return value: '1'
[14:00:07] [DEBUG] CCallback::Create(amx=0x176a728, name='OnQueryError', format='dsssd)
Edit: no habia visto la carpeta logs xD
Reply
#2

EDIT: no vi la ъltima respuesta antes de comentar. Echa un vistazo al apartado inferior sobre las comillas.

En la R40 ha cambiado la forma de guardar los logs, ahora en la carpeta del servidor tienes una carpeta llamada logs. Dentro de la misma hay una carpeta llamada plugins y tres archivos que guardan los mensajes segъn la clasificaciуn: error, warning, log-core; en la carpeta deberнa encontrarse mysql.log con toda la informaciуn (debido a mysql_log).

Creo que maddinat0r lo ha puedo asн para organizar mejor los logs en caso de crear otros plugins en el futuro.

Respecto al cуdigo que dejaste yo tendrнa en cuenta lo siguiente:
  • Usar mysql_connect_file.
    Asн no tienes que definir las macros con la informaciуn para establecer la conexiуn. Tambiйn te ahorras tener que usar mysql_global_options, o bien, mysql_init_options y mysql_set_option. Te dejo un ejemplo:

    • mysql.ini
      Код:
      hostname = localhost
      username = root
      password = by_R2D
      database = mibasededatos
      auto_reconnect = true
      multi_statements = false
      pool_size = 2
      server_port = 3306
      ssl_enable = false
    PHP код:
    new MySQL:sql_handle;
    public 
    OnGameModeInit()
    {
        
    mysql_log(ALL);
        
    sql_handle mysql_connect_file("mysql.ini"); // Conexiуn mediante los datos de mysql.ini
        
    if(sql_handle == MYSQL_INVALID_HANDLE  || mysql_errno(sql_handle) != 0)
        {
            
    /*
            No se pudo establecer la conexiуn.
            Ojo a la condiciуn, puedes obtener MYSQL_INVALID_HANDLE y no obtener ningъn error.
            */
        
    }
        else
        {
            
    /* Conexiуn establecida correctamente. */
        
    }
        return 
    1;

    En tu caso como no existe una contraseсa para conectarse a la base de datos debes eliminar el parбmetro password de mysql.ini. El archivo con la informaciуn para establecer la conexiуn debe colocarse en la carpeta principal del servidor.

  • Usar las comillas correctas y las celdas necesarias en las queries
    Normalmente en MySQL las comillas simples se utilizan para indicar que tratamos con datos dinбmicos, es decir, utilizamos '' cuando existen especificadores como: %s, %d, etc. Por otro lado, para indicar nombres de tablas, nombres de campos, etc. utilizamos `` (debido a normas estбndar del MySQL).

    Veamos un ejemplo:
    PHP код:
    new string[150];
    mysql_format(db_connectionstringsizeof(string),
        
    "SELECT 'clave', 'id' FROM 'cuentas' WHERE nombre = '%s' LIMIT 1",
        
    nombre
    );
    /* Deberнa ser: */
    new string[86];
    mysql_format(db_connectionstringsizeof(string),
        
    "SELECT `clave`, `id` FROM `cuentas` WHERE `nombre` = '%s' LIMIT 1",
        
    nombre
    ); 
    Fнjate que hemos especificado 86 caracteres para la consulta, suponiendo que nombre ocupa 24 caracteres el total serнa: 85 + EOS = 86 caracteres.

  • Usar cache_get_value_index (_int, _float) en lugar de cache_get_value_name (_int, _float).
    Simplemente porque es mбs rбpido acceder al нndice que ir comparando el nombre de la columna.
Todo lo demбs lo veo bien, posiblemente el error estй en la consulta debido a las comillas. O igual no tienes creada la tabla cuentas en la base de datos o algo similar.

Ya me contarбs que tal sale, Ўmucha suerte!
Reply
#3

Cuando enviaste el mensaje, reciйn estaba editando el topic (no habia visto la carpeta). Realice los cambios pertinentes, pero sigue sin aparecerme los dialogos.


Quote:
Originally Posted by errors.logs
[14:23:15] [plugins/mysql] error #1064 while executing query "SELECT 'clave', 'id' FROM 'cuentas' WHERE 'nombre' = 'Granat3' LIMIT 1": You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''cuentas' WHERE 'nombre' = 'Granat3' LIMIT 1' at line 1
їQuй es?, entiendo que es un error de sintaxis.
Reply
#4

Efectivamente, es un error de sintaxis. їPusiste las comillas correctas?
Код:
SELECT 'clave', 'id' FROM 'cuentas' WHERE 'nombre' = 'Granat3' LIMIT 1
Ahн sigo viendo las que no son, copia y pega lo siguiente:
Код:
SELECT `clave`, `id` FROM `cuentas` WHERE `nombre` = '%s' LIMIT 1
No hay razуn aparente para que no te salgan los dialogs. Te mando un MP.
Reply
#5

Habia leнdo lo de las comillas, pero no note que la comillas simple que colocaste eran diferente, realmente no sй como poner ese tipo de comillas en mi teclado.

Lei algo referente a eso en sublime. Gracias.
Reply
#6

Ese tipo de comillas no son obligatorias, puedes omitirlas, por ejemplo:
Код:
SELECT clave, id FROM cuentas WHERE nombre = '%s' LIMIT 1
Como ves las comillas simples '' siguen siendo obligatorias para los especificadores.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)