Armazenar array no mysql

4,393 views
Skip to first unread message

igorhaf

unread,
Nov 1, 2009, 11:14:42 AM11/1/09
to php-brasil
a duvida pode ser boba mas eu sempre tive...
sempre que tenho que armazenar um array em um unico campo eu coloco
num campo texto, uma string com os elementos do array seperado por
virgulas, assim, na hora de resgatar os dados eu so dou um explode e
obtenho o array daquele campo, mas o que eu queria saber eh se existe
algum metodo nativo do mysql pra se armazenar um array dentro de um
campo, ou se alguem faz de uma forma melhor (so nao vale fazer outra
tabela pra isso, nao eh um metodo melhor, hehehehe)

Rafael Eduardo Kassner

unread,
Nov 3, 2009, 6:48:33 AM11/3/09
to php-b...@googlegroups.com
Você pode usar as funções serialize e unserialize, é mais eficiente que separar por vírgulas.

Para fazer da maneira certa, depende do que você está armazenando.

Valeu!

2009/11/1 igorhaf <igo...@gmail.com>



--
Rafael Eduardo Kassner
http://www.kassner.com.br
+55 47 9992-9170

Stephan A. de Souza

unread,
Nov 3, 2009, 5:04:44 PM11/3/09
to php-b...@googlegroups.com
Tabmém recomendo o serialize/unserialize mas podemos colocar como opção o json_encode ocupa menos espaço, mas obriga você a usar UTF8 nos dados.

2009/11/3 Rafael Eduardo Kassner <kas...@gmail.com>



--
Analista de Sistemas Ação Direta : www.acaodireta.com.br | p...@acaodireta.com.br
www.twitter.com/bladed
Administrador HxBr.net
Forum/TeamSpeak Admin ragnaBR.net

[PHPDF] Pablo Sánchez

unread,
Nov 4, 2009, 8:50:46 AM11/4/09
to php-brasil
:-/

A menos que vc realmente não tenha controle sobre o que pode estar no
array, o correto seria uma tabela associada 1:n, sendo 1 o item
editado e n os itens do seu array.

Não faça modelagem pela metade.

Igor - agora sem barba...

unread,
Nov 4, 2009, 9:15:58 AM11/4/09
to php-b...@googlegroups.com
nao eh falta de estudo nem nada disso, sei o que a regra de normalização pede, mas eu queria soluções mais criativas caso eu queira priorizar o desempenho ao invez das regras... a do serialize eh eh otima...

2009/11/4 [PHPDF] Pablo Sánchez <phac...@gmail.com>



--
Igor Herson Aquino de França
( 8615 - 5437 )

Gestor de Projetos

Elton Schivei Costa

unread,
Nov 4, 2009, 10:55:21 AM11/4/09
to php-b...@googlegroups.com
você pode empacotar o seu código, independente de ser com serilize/unserialize ou com json, use um base64_encode/_decode para fazer isso, assim, permanece utilizando UTF-8 ( use somente UTF8-UNICODE no bd, na tabela e no campo.

fazendo isso, pode até mesmo subir objetos completos e complexos, como um framework, direto para o bd, basta quando chamar o resultado da tabela com o exemplo abaixo:

$array = (array) $row['array'];
$object = (object) $row['object'];

usando o (array), você pode transformar um objecto em array, o mesmo vale se usar o (object) onde permite transformar o array em um objeto.

att.

2009/11/4 Igor - agora sem barba... <igo...@gmail.com>

Elton Schivei Costa

unread,
Nov 4, 2009, 11:06:16 AM11/4/09
to php-b...@googlegroups.com
tem um caso que funciona, onde, ao gravar algo em seu bd, faça o seguinte.

Gravando em banco

$minhaArray = array("x","y"=>"z"); //exemplo com uma array mista

......(insira o código de conexão com o banco aqui)

$sql = "INSERT INTO `tabela` (`campo`) VALUES ('".(array) $minhaArray."')"; // aqui você entrega a sua variável $minhaArray completa ao comando sql

.....(código para terminar a gravação em bd aqui)

Selecionando a array

......(código de conexão ao banco)

$minhaArrayEmBanco =& (array) row['campo'];

......(finaliza conexão)

eu uso isto em sessões, sem precisar de serialize/unserialize, bem mais prático e rápido.

att

2009/11/4 Elton Schivei Costa <lord....@gmail.com>

Elton Schivei Costa

unread,
Nov 4, 2009, 12:05:37 PM11/4/09
to php-b...@googlegroups.com
corrigindo post anterior, fiz o teste, nem todos os php vem com suporte a json, o meu não tem, nem mesmo o sistema consegue converter um objeto ou array para string, ou seja, só funciona de forma garantida usando o serialize/unserialize.

// Fiz o teste em uma tabela com um campo text, nela, serializei todo o codeigniter e gravei nessa tabela que está em um bd do SQL SERVER em minha máquina, foi bem rápido, porém, em unserialized, não funcionou, pois, o tamanho do que tenho é muito grande.

Marcelo Rodrigues

unread,
Nov 4, 2009, 10:37:47 AM11/4/09
to php-b...@googlegroups.com
Serialize/unserialize, é mais fácil.

2009/11/1 igorhaf <igo...@gmail.com>



--
Marcelo Rodrigues
Webdeveloper
http://www.marcelomx.com

Marcelo Rodrigues

unread,
Nov 4, 2009, 6:35:57 PM11/4/09
to php-b...@googlegroups.com
Isso vale apenas para objetos instanciados da classe stClass, do contrário, você precisa implementar os métodos mágicos wakeup e sleep para fazer a serialização/desserialização.

abs,
Marcelo


2009/11/4 Elton Schivei Costa <lord....@gmail.com>
você pode empacotar o seu código, independente de ser com serilize/unserialize ou com json, use um base64_encode/_decode para fazer isso, assim, permanece utilizando UTF-8 ( use somente UTF8-UNICODE no bd, na tabela e no campo.
Reply all
Reply to author
Forward
0 new messages