Query en sqlite
#1

Hola, recientemente me di cuenta con un problema en mi query, no registra a los usuarios, la verdad no encuentro el error, este es el cуdigo de registro.

pawn Код:
format(Query, sizeof(Query), "INSERT INTO `USERS` (`NAME`, `PASSWORD`, `IP`, `SCORE`, `DINERO`, `ADMINLEVEL`, `LEVEL`, `VIP`, `RANGO`, `KILLS`, `DEATHS`,`EXPERIENCIA`,`MISION`,`MISIONCOUNT`,`CLAN`,`DUELOSGAN`,`DUELOSOUT`,`CARRERAS`,`COLOR`,`SKIN`,`POSX`,`POSY`,`POSZ`) VALUES('%s', '%s', '%s', '%d', '%d', '%d', '%d', '%d', '%f', '%d', '%d', '%f', '%d', '%d', '%d', '%d', '%d', '%d', '%d','%d','%f','%f','%f')",
                    DB_Escape(PlayerName(playerid)),
                    DB_Escape(inputtext),
                    PlayerIp(playerid),
                    PlayerInfo[playerid][Score],
                    0,
                    PlayerInfo[playerid][AdminLevel],
                    PlayerInfo[playerid][Level],
                    PlayerInfo[playerid][VipLevel],
                    PlayerInfo[playerid][Rango],
                    PlayerInfo[playerid][Kills],
                    PlayerInfo[playerid][Deaths],
                    PlayerInfo[playerid][Experiencia],
                    PlayerInfo[playerid][Mision],
                    PlayerInfo[playerid][CountMision],
                    PlayerInfo[playerid][Clan],
                    PlayerInfo[playerid][DuelosGanados],
                    PlayerInfo[playerid][DuelosPerdidos],
                    PlayerInfo[playerid][Carreras],
                    -1,
                    -1,
                    0.0000,
                    0.0000,
                    0.0000);

                    db_query(ADReNaLiNaDB, Query);
Espero y puedan ayudarme, si necesitan mas datos favor de avisarme.
Reply
#2

No sй como sea tu DB, posiblemente me equivoque.

Posibles errores:

- RANGO lo estбs pasando como flotante (%f) y supongo que tendrнa que ser un nъmero (%d).
- EXPERIENCIA - Lo mismo que el anterior.
- CLAN lo estбs pasando como nъmero (%d) y supongo que tendrнa ser una cadena de texto (%s).

pawn Код:
format(Query, sizeof(Query), "INSERT INTO `USERS` (`NAME`, `PASSWORD`, `IP`, `SCORE`, `DINERO`, `ADMINLEVEL`, `LEVEL`, `VIP`, `RANGO`, `KILLS`, `DEATHS`,`EXPERIENCIA`,`MISION`,`MISIONCOUNT`,`CLAN`,`DUELOSGAN`,`DUELOSOUT`,`CARRERAS`,`COLOR`,`SKIN`,`POSX`,`POSY`,`POSZ`) VALUES('%s', '%s', '%s', %d, 0, %d, %d, %d, %d, %d, %d, %d, %d, %d, %s, %d, %d, %d, -1, -1, 0.0000, 0.0000, 0.0000)",
                    DB_Escape(PlayerName(playerid)),
                    DB_Escape(inputtext),
                    PlayerIp(playerid),
                    PlayerInfo[playerid][Score],
                    PlayerInfo[playerid][AdminLevel],
                    PlayerInfo[playerid][Level],
                    PlayerInfo[playerid][VipLevel],
                    PlayerInfo[playerid][Rango],
                    PlayerInfo[playerid][Kills],
                    PlayerInfo[playerid][Deaths],
                    PlayerInfo[playerid][Experiencia],
                    PlayerInfo[playerid][Mision],
                    PlayerInfo[playerid][CountMision],
                    PlayerInfo[playerid][Clan],
                    PlayerInfo[playerid][DuelosGanados],
                    PlayerInfo[playerid][DuelosPerdidos],
                    PlayerInfo[playerid][Carreras]);
Tambiйn te recomiendo usar sentencias preparadas (si es que usas el include de Slice), ya que tienen muchas ventajas.

pawn Код:
//Preparamos la sentencia
new DBStatement:stmt = db_prepare(ADReNaLiNaDB, "INSERT INTO USERS VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");

//Establecemos los valores para los signos de interrogaciуn (el primero es 0, el segundo es 1, etc.)
/*
NAME - 0 - STRING
PASSWORD - 1 - STRING
IP - 2 - STRING
SCORE - 3 - INT
DINERO - 4 - INT
ADMINLEVEL - 5 - INT
LEVEL - 6 - INT
VIP - 7 - INT
RANGO - 8 - INT
KILLS - 9 - INT
DEATHS - 10 - INT
EXPERIENCIA - 11 - INT
MISION - 12 - INT
MISIONCOUNT - 13 - INT
CLAN - 14 - STRING (?)
DUELOSGAN - 15 - INT
DUELOSOUT - 16 - INT
CARRERAS - 17 - INT
COLOR - 18 - INT
SKIN - 19 - INT
POSX - 20 - FLOAT
POSY - 21 - FLOAT
POSZ - 22 - FLOAT */

stmt_bind_value(stmt, 0, DB::TYPE_STRING, PlayerName(playerid));
stmt_bind_value(stmt, 1, DB::TYPE_STRING, inputtext);
stmt_bind_value(stmt, 2, DB::TYPE_STRING, PlayerIp(playerid));
//No hay necesidad de usar Escape en ninguna cadena de texto usando sentencias preparadas.
stmt_bind_value(stmt, 3, DB::TYPE_INT, PlayerInfo[playerid][Score]);
stmt_bind_value(stmt, 4, DB::TYPE_INT, 0);
stmt_bind_value(stmt, 5, DB::TYPE_INT, PlayerInfo[playerid][AdminLevel]);
stmt_bind_value(stmt, 6, DB::TYPE_INT, PlayerInfo[playerid][Level]);
stmt_bind_value(stmt, 7, DB::TYPE_INT, PlayerInfo[playerid][VipLevel]);
stmt_bind_value(stmt, 8, DB::TYPE_INT, PlayerInfo[playerid][Rango]);
stmt_bind_value(stmt, 9, DB::TYPE_INT, PlayerInfo[playerid][Kills]);
stmt_bind_value(stmt, 10, DB::TYPE_INT, PlayerInfo[playerid][Deaths]);
stmt_bind_value(stmt, 11, DB::TYPE_INT, PlayerInfo[playerid][Experiencia]);
stmt_bind_value(stmt, 12, DB::TYPE_INT, PlayerInfo[playerid][Mision]);
stmt_bind_value(stmt, 13, DB::TYPE_INT, PlayerInfo[playerid][CountMision]);
stmt_bind_value(stmt, 14, DB::TYPE_STRING, PlayerInfo[playerid][Clan]);
stmt_bind_value(stmt, 15, DB::TYPE_INT, PlayerInfo[playerid][DuelosGanados]);
stmt_bind_value(stmt, 16, DB::TYPE_INT, PlayerInfo[playerid][DuelosPerdidos]);
stmt_bind_value(stmt, 17, DB::TYPE_INT, PlayerInfo[playerid][Carreras]);
stmt_bind_value(stmt, 18, DB::TYPE_INT, -1);
stmt_bind_value(stmt, 19, DB::TYPE_INT, -1);
stmt_bind_value(stmt, 20, DB::TYPE_FLOAT, 0.0000);
stmt_bind_value(stmt, 21, DB::TYPE_FLOAT, 0.0000);
stmt_bind_value(stmt, 22, DB::TYPE_FLOAT, 0.0000);

// Ejecutamos la sentencia
stmt_execute(stmt);

// Despuйs la cerramos.
stmt_close(stmt);
Mбs acerca de las sentencias preparadas
Reply
#3

de hecho

- RANGO lo estбs pasando como flotante (%f) y supongo que tendrнa que ser un nъmero (%d).
- EXPERIENCIA - Lo mismo que el anterior.
- CLAN lo estбs pasando como nъmero (%d) y supongo que tendrнa ser una cadena de texto (%s).

Estan correctamente puestas, rango es flotante experiencia igual y clan es un numero entero.

Edit no encuentro aun el error y no uso ese include, no se si pueda ser por la sobrecarga de cuentas en la base de datos?

Otro dato tal vez sea util, cuando registro en localhost mi pc funciona bien, e incluso en el hosting, pero a veces no quiere registrar.
Reply
#4

El tamaсo de la variable es inferior a los datos que deberia guardar, por lo que no se forma correctamente la sentencia.
Reply
#5

Tal vez sea eso, con nicks y contraseсas grandes podria ser que sobrepase el limite, aumentare el tamaсo y les digo que paso.
Reply
#6

Me ayudo a ti tambiйn

https://sampforum.blast.hk/showthread.php?tid=278188

Y usa el RBIST esta tan rбpido *u*
Reply
#7

Quote:
Originally Posted by adrianxd
Посмотреть сообщение
Me ayudo a ti tambiйn

https://sampforum.blast.hk/showthread.php?tid=278188

Y usa el RBIST esta tan rбpido *u*
de hecho ya tengo todo hecho, y estaba bien solo que de unos dias para aca o con algunos nicks no funciono.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)