[TUT] convertir array a string para almacenar en sql
#1
mas que un tutorial es una breve explicacion de como usar un stock, llevo un par de dias dando vueltas por el foro y no encontre un post donde lo expliquen por completo (pude entender su uso viendo varios post y experimentando por mi mismo con mis plugins)

bueno paso a explicar como me funciono a mi, lo pude testear y por lo menos a mi me funciona correctamente


este es el array que vamos a convertir a string para almancenarlo en sql

Código PHP:
new has_skills[33][21

los stocks que vamos a usar para llevar a cabo lo antes dicho son los siguientes (los stocks son de metalicross, los creditos van para el)

Código PHP:
PackArrayToString(szString[], iLen, const iDest[], const iDestSize sizeof iDest, const iSeparator ',')
{
 if(
iDestSize <= 0)
 return 
0;
    
 
new iWritten1
 iWritten 
num_to_str(iDest[0], szStringiLen)
    
 
while( iDestSize && iWritten iLen )
 
iWritten += formatex(szString[iWritten], iLen iWritten"%c%d"iSeparatoriDest[i++])
    
 
return iWritten;
}

StringToArray(const szData[], iDest[], const iDestSize sizeof iDest, const iSeparator ',')
{
 new 
szChunk[32], szBuffer[128], i;
 
copy(szBuffercharsmax(szBuffer), szData);

 while( 
iDestSize )
 {
 
strtok(szBufferszChunkcharsmax(szChunk), szBuffercharsmax(szBuffer), iSeparator1)
 
iDest[i++] = str_to_num(szChunk)
 }
    
 
return i;


nuestra funcion de guardado seria mas o menos asi

Código PHP:
public Guardar(id)
{
 static 
string[99// esto va a almacenar nuestro array en string para despues guardarla

 
PackArrayToString(stringcharsmax(string), has_skills[id]) // convertimos el array has_skills[] y lo almacenamos en string[]

 ////// importante al guardarlo en la base de datos lo guardamos como string "%s" en una columna tipo varchar
 
 
g_Tuple SQL_PrepareQuery(g_Connection"UPDATE ^"%s^" SET db_skills = ^"%s^" WHERE Nombre = ^"%s^""g_dbtablestringpname[id])
 
SQL_Execute(g_Tuple)



y nuestra funcion de carga seria

Código PHP:
public Cargar(id)
{
 
g_Tuple SQL_PrepareQuery(g_Connection"SELECT db_skills FROM ^"%s^" WHERE Nombre = ^"%s^""g_dbtablepname[id])

 if(
SQL_Execute(g_Tuple))
 {
 static 
string[99]

 
SQL_ReadResult(g_Tuple0stringcharsmax(string))

 
StringToArray(stringhas_skills[id]) // convertimos el string obtenido de la base de datos y lo almacenamos en el array
 
}


dato: a la columna tipo varchar le tuve que dar valor default '' porque sino no guardaba nada

si el string no se guarda/carga completo hay que aumentar el valor de string[]
Responder
#2
quizá normalizar tu db vendría mejor que guardar tu array como string.
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#3
recien aprendo sql asi que no se a que te referis, por lo que tengo entendido no se puede almacenar un array a menos que sea conviertiendolo, o al menos no encontre nada al respecto en este foro

ya que estamos si me aclaran una duda, esta bien usar preparequery en mysql si el server y la base corren en la misma maquina ?
Responder
#4
Código PHP:
public Cargar(id)
{
    
g_Tuple SQL_PrepareQuery(g_Connection"SELECT db_skills FROM ^"%s^" WHERE Nombre = ^"%s^""g_dbtablepname[id])
    
    if (
SQL_Execute(g_Tuple))
    {
        static 
string[99]
        
SQL_ReadResult(g_Tuple0stringcharsmax(string))
        
StringToArray(stringhas_skills[id]) // convertimos el string obtenido de la base de datos y lo almacenamos en el array
    
}


----------------->

public Cargar(id)
{
    new 
Handle:g_Tuple;
    
g_Tuple SQL_PrepareQuery(g_Connection"SELECT db_skills FROM ^"%s^" WHERE Nombre = ^"%s^""g_dbtablepname[id]);
    
    if (!
SQL_Execute(g_Tuple))
    {
        
log_to_file("SQL_ERROR.log""Error al ejecutar una consulta. En la funcion: 'Cargar(id)'");
        
SQL_FreeHandle(g_Tuple);
    }
    else if (
SQL_NumResults(g_Tuple)) // Si se encuentran resultados los obtenemos
    
{
        static 
string[99];
        
SQL_ReadResult(g_Tuple0stringcharsmax(string));
        
StringToArray(stringhas_skills[id]); // convertimos el string obtenido de la base de datos y lo almacenamos en el array
        
        
SQL_FreeHandle(g_Tuple);
    }
    else 
// Si se ejecuto todo bien pero no hay resultados liberamos la consulta
        
SQL_FreeHandle(g_Tuple);


Buenos stocks y buena explicacion.
___________________________________
SI NECESITAS UN PLUGIN TE LO HAGO $$$
COMUNICATE A MI DISCORD: emanuelitop15
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)