Enviar respuesta 
[MYSQ] INSERT/UPDATE Sentence Maker
Autor Mensaje
LuKks Sin conexión
Miembro Sr.


Plugin developer
Mensajes: 465
Registro en: Jul 2014
Reputación: 19
Mensaje: #11
RE: [MYSQ] INSERT/UPDATE Sentence Maker
(02/12/2019 07:47 PM)Sugisaki escribió:  
(02/12/2019 06:15 PM)LuKks escribió:  Eso no evita SQL injection. Lo que sucede es que ^" sirve para insertar comilla sin hacer conflicto de sintaxis en AMXX.
En MySQL los strings van entre comillas y en AMXX los strings también se definen con comillas.

(30/10/2014 04:30 PM)meTaLiCroSS escribió:  El string seria tomado como "holamundo'peperulz'jeje'", solo tomara como inicio y termino las comillas dobles, las comillas simples no importaran un huevo. Y un nombre de CS no puede tener comilla doble, entonces no hay de que atarearse.

Entonces habría que eliminar la función escape porque no sirve para nada, quién fue el tonto que la creó?
Quitando el sarcasmo, no estamos hablando del valor name únicamente, estamos hablando de cualquier valor de tipo string.

Por ejemplo, mi contraseña es hw"y1!23
Código PHP:
new password[] = "hw^"y1!23";
sql_prepare_update("
pug_stats_player", "password = ^"%s^"", password); 
La query va a quedar: password = "hw"y1!23"
Por lo tanto va a fallar, y gracias al universo no fue SQL injection.

(02/12/2019 07:47 PM)Sugisaki escribió:  
(02/12/2019 06:15 PM)LuKks escribió:  Aprovecho para decir que las llaves quedan mejor así:
Código PHP:
if(== 0) {
  
len += formatex(query[len], charsmax(query), "`%s`"data);
} else {
  
len += formatex(query[len], charsmax(query), ",`%s`"data);

eso depende del programador no afecta la logica del codigo

Eso depende de si querés que otro desarrollador lea tu código.
Publicamos aportes porque queremos que otros lo vean, lean, usen, etcétera.
Es como escribir un libro con faltas ortográficas, seguro que las palabras se entienden pero se sufre mucho al leer y menos personas lo terminan leyendo.

(02/12/2019 07:47 PM)Sugisaki escribió:  
(02/12/2019 06:15 PM)LuKks escribió:  Lo importante es que si vemos código repetido, casi siempre hay una forma de reducirlo:
Código PHP:
len += formatex(query[len], charsmax(query), "%s`%s`"== "" ","data); 

Whatdone, si eso lo vi, si ves un poco mas baja esta esa condicion y me dio pereza modificarla
(02/12/2019 06:15 PM)LuKks escribió:  Si paso un string de 300 caracteres no alcanza el buffer:

que columna tendra mas de 256 caracteres? Whatever

Es obvio que probablemente ninguna columna pero valores? E incluso múltiples valores?
Por ejemplo, estoy registrando todo lo que los usuarios dicen por say y alguien escribe 250 caracteres, entonces ya no me alcanza porque todavía falta INSERT y demás partes de la query.
Y si en la misma query estoy registrando el nombre, la fecha y otros datos? No alcanza.

Leyendo noté que el buffer de count es de 4:
Código PHP:
new num[4
Cuando count llegue a 10000 entonces num va a quedar 1000.
Y si continúo haciendo consultas num va a seguir siendo 1000 nueve veces más, lo cual provocaría resultados inesperados (query no enviada o error dependiendo del código).

(02/12/2019 07:47 PM)Sugisaki escribió:  
(02/12/2019 06:15 PM)LuKks escribió:  __count no provoca un error cuando se pase el límite máximo de integer? Si count vuelve a cero el código seguiría funcionando correctamente?
no hay problema, al momento que se ejecuta sql_execute se elimina los datos referente a la identificacion dejandola libre

Me refería a count mismo, pero poco importa ya que ahora está el problema del buffer num.


Mis comentarios son simplemente feedback para que mejores aún más el aporte, no tenés que aplicar nada de lo que dije pero no te molesta la posibilidad de que tu código le genere errores o problemas en los plugins de otras personas?

02/12/2019 09:45 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Sugisaki Sin conexión
Miembro Destacado


Medalla de aportes Trebol purpura 1k
Mensajes: 1,090
Registro en: Jul 2014
Reputación: 21
Mensaje: #12
RE: [MYSQ] INSERT/UPDATE Sentence Maker
(02/12/2019 09:45 PM)LuKks escribió:  Es obvio que probablemente ninguna columna pero valores? E incluso múltiples valores?
Por ejemplo, estoy registrando todo lo que los usuarios dicen por say y alguien escribe 250 caracteres, entonces ya no me alcanza porque todavía falta INSERT y demás partes de la query.
Y si en la misma query estoy registrando el nombre, la fecha y otros datos? No alcanza.

el tamaño maximo final de la oracion es 1280 lo de 256 es el tamaño buffer por columna
Código PHP:
stock sql_execute(SQL_DATA:sql_idHandle:hquery, const handler[], const szData[]=""datasize=0)
{
    new 
query[1280], data[256], ilennum[4], m;

(02/12/2019 09:45 PM)LuKks escribió:  Eso depende de si querés que otro desarrollador lea tu código.
Publicamos aportes porque queremos que otros lo vean, lean, usen, etcétera.
Es como escribir un libro con faltas ortográficas, seguro que las palabras se entienden pero se sufre mucho al leer y menos personas lo terminan leyendo.
ve arkshine's indent Roflmao
recalco siempre y cuando no afecte la funcionalidad lo puedes escribir como sea, eso es comodidad del programador, a mi no me gustan las cosas amontonadas, queda feo a simple vista
(RegameDLL Github)
Image

(02/12/2019 09:45 PM)LuKks escribió:  Cuando count llegue a 10000 entonces num va a quedar 1000.
Y si continúo haciendo consultas num va a seguir siendo 1000 nueve veces más, lo cual provocaría resultados inesperados (query no enviada o error dependiendo del código).
mmm no tanto, ya que al llamar sql_execute en el mismo frame del sql_prepare* se eliminara su contenido peeero si pospones la ejecucion del sql_execute para se llame en otro frame o estes usando 2 o mas sql_prepare* en paralelo ahi si te puedes asustar, pero hay que ser medio maniatico para hacer 999+ en menos de 30 min (tiempo promedio de duracion del mapa)

(02/12/2019 09:45 PM)LuKks escribió:  Mis comentarios son simplemente feedback para que mejores aún más el aporte
Sep lo entiendo y lo agradezco Proud, no me molesto, solo respondo tus inquietudes Proud

(02/12/2019 09:45 PM)LuKks escribió:  no tenés que aplicar nada de lo que dije pero no te molesta la posibilidad de que tu código le genere errores o problemas en los plugins de otras personas?

de errores se aprende Trolleyes, yo tengo una manera peculiar de hacer un proyecto primero hago algo lo cual es lo mas feo posible ya que se me da por la mente asi, sobre la marcha voy aplicando parches y mejoras sobre el mismo, cambiando funciones y hasta rework el proyecto entero puedes echarle un ojo al fpug, ve la version 1.21 que esta en am-es y ve la de github, veras que funcionan IGUAL, pero escrito de otra manera

Competitive/Face it Pick Up Game (PUG) servidor de prueba: 45.77.94.109:27016 Click para Entrar
Image

(14/08/2015 10:15 PM)Sugisaki escribió:  "El mundo es caotico, irracional e injusto. No tiene ningun significado"
Palabras que desde hace mucho tiempo he buscado para describir, ¿Que es el mundo?
Crab

Código PHP:
if(ayuda && free)
{
    exit();

02/12/2019 11:25 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Sugisaki Sin conexión
Miembro Destacado


Medalla de aportes Trebol purpura 1k
Mensajes: 1,090
Registro en: Jul 2014
Reputación: 21
Mensaje: #13
RE: [MYSQ] INSERT/UPDATE Sentence Maker
Codigo Completamente reescrito y medio documentado Whatever
Ahora escapa las comillas dobles y el slash inverso (es el unico metodo de inyeccion sql por amxx)
Código PHP:
// INSERT
    
sid sql_init(SQL_INSERT);
    
sql_set_table(sid"tabla")
    
sql_set_value(sid"c1""data^"")
    sql_set_value(sid, "
c2", "%s", "data")
    sql_execute(sid);
    //UPDATE
    sid = sql_init(SQL_UPDATE)
    sql_set_table(sid, "
tabla")
    sql_set_value(sid, "
c1", "data")
    sql_update_value(sid, "
c2", "123", true, "c2", "+")
    sql_update_value(sid, "
c3", "jose")
    sql_set_where(sid, "
player", "SUGI", "pass", "^"2\ \^"23");
    sql_execute(sid)
    // MANUAL WHERE 
    sid = sql_init(SQL_UPDATE)
    sql_set_table(sid, "
tabla")
    sql_set_value(sid, "
c1", "data")
    sql_update_value(sid, "
c2", "123", true, "c2", "+")
    sql_update_value(sid, "
c3", "jose")
    sql_set_where_manual(sid, "
player='jose' AND pass='sugi123'");
    sql_execute(sid) 

quedaria algo como:
Image

Competitive/Face it Pick Up Game (PUG) servidor de prueba: 45.77.94.109:27016 Click para Entrar
Image

(14/08/2015 10:15 PM)Sugisaki escribió:  "El mundo es caotico, irracional e injusto. No tiene ningun significado"
Palabras que desde hace mucho tiempo he buscado para describir, ¿Que es el mundo?
Crab

Código PHP:
if(ayuda && free)
{
    exit();

(Este mensaje fue modificado por última vez en: 03/12/2019 01:59 PM por Sugisaki.)
03/12/2019 01:55 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
LuKks Sin conexión
Miembro Sr.


Plugin developer
Mensajes: 465
Registro en: Jul 2014
Reputación: 19
Mensaje: #14
RE: [MYSQ] INSERT/UPDATE Sentence Maker
No man, tiene que ser ultra simple.

Código PHP:
insert("users""points"10000"level"85"admin""full")

update("users""points"15000"id = %i"5)

//
public update(table[], any:...) {}
public 
insert(table[], any:...) {} 

Esto de simplificar las queries lo hice en PHP hace años (http://i.imgur.com/YAQeeKl.png).
Hace bastante lo re-hice en Node.js que es donde te dije que obtengas ideas: like-mysql

Pensá que ya todos lograron hacer sus plugins con mysql sin tu librería entonces por qué deberían usarla? Por eso tiene que ser suficientemente buena así vale la pena depender de la librería.
Destro no te publica el vault medio armado con funciones básicas faltantes, te publica todo el sistema completo de manera consistente y con actualizaciones retrocompatibles.

Insert
Código PHP:
insert("users""points"10000"level"85"admin""full"
tabla, columna, valor, columna, valor, ...
Usando numargs() y getarg(i) lo tenés hecho, vas tomando de a pares.

Update
Código PHP:
update("users""points"15000"id = %i"5
tabla, columna, valor, ..., where, valores, ...
Al where lo identificás porque tiene al menos un espacio.

Si vés mi librería notarás que mi update también te permite sumar, restar, etcétera y acá lo podemos lograr así:
Código PHP:
update("users""points=points+%i"1000"id = %i"5
Similar al where, a esto lo identificás porque tiene el signo = y no tiene espacios.

Por cierto, el select, count, exists y delete no tienen mayor complejidad pero al menos select y delete deberían estar disponibles.

Después si querés ser un héroe, se puede simplificar el tema de las comillas.
Por ejemplo, tenés lo siguiente que sería lo normal:
Código PHP:
update("users""points"15000"name = ^"%s^"""LuKks"
Pero es molesto lidiar con ^" porque es repetitivo y queda confuso para alguien nuevo.
En cambio, se puede lo siguiente:
Código PHP:
update("users""points"15000"name = %s""LuKks"
Sí, sin comillas.
Vos como librería ya tenés el %s que indica que es un string así que se pueden añadir automáticamente y les ahorrás a todos tanto drama con comillas.

04/12/2019 02:11 AM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Allied Modders en español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS