2012-05-21 28 views
9

Desidero salvare ulteriori informazioni prima di inviare l'ordine totale a Paypal. Per ogni articolo ho creato una singola colonna nel mio database MySQL dove voglio memorizzarla. Ora stavo pensando di salvarlo come una matrice che posso leggere più tardi per la creazione di una pagina PHP. I campi aggiuntivi sono presi dai campi del modulo di input.Salva array nel database mysql

Utilizzando un array è possibile non confondere le informazioni?

+0

"Ho una colonna per ciascuna voce" .. intendi riga o? –

+4

memorizzare un array in un singolo campo mysql vanifica lo scopo di un database. Come si presenta il tuo codice attuale? – Cfreak

+0

MySQL 5.7.8 e versioni successive ora supporta il supporto JSON nativo, il che significa che è possibile inserire una stringa JSON direttamente in un campo tabella nel database. – Sliq

risposta

24

È possibile memorizzare l'array utilizzando serialize/unserialize. Con questa soluzione non possono essere facilmente utilizzati da altri linguaggi di programmazione, quindi si può prendere in considerazione l'utilizzo di json_encode/json_decode (che offre un formato ampiamente supportato). Evitare utilizzando implode/explode per questo poiché probabilmente si finirà con bug o difetti di sicurezza.

Si noti che ciò rende la tabella non normalizzata, che può essere una cattiva idea poiché non è possibile interrogare facilmente i dati. Pertanto, consideralo attentamente prima di andare avanti. Potrebbe essere necessario interrogare i dati per statistiche o altro? Ci sono altri motivi per normalizzare i dati?

Inoltre, non salvare l'array $_POST grezzo. Qualcuno può facilmente creare il proprio modulo Web e pubblicare dati sul proprio sito, inviando così un modulo molto grande che occupa molto spazio. Salva i campi che desideri e assicurati di convalidare i dati prima di salvarli (in modo da non ottenere valori non validi).

+0

per favore potresti approfondire i difetti di sicurezza che circondano 'implode()' e 'explode()'. – verbumSapienti

+1

verbumSapienti, considera questo pezzo di codice: 'implode (':', ['12', '34', '5: 6'])' che risulta in questa stringa: '12: 34: 5: 6'. Ciò non dovrebbe accadere in primo luogo se si dispone della corretta convalida dell'input (in modo che nessun valore possa mai essere '5: 6'), ma è sempre meglio usare le funzioni che sono parametrizzate e/o sempre genera dati validi non ambigui, come json_encode. –

+0

In primo luogo c'è un errore ortografico nella risposta (dovrebbe essere serializzato non serializzato). In secondo luogo, serialize/unserialize è il modo standard per archiviare intere strutture come stringhe in PHP. È possibile serializzare oggetti, incluse le loro proprietà ecc. JSON è il migliore se si desidera archiviare gli array in quanto è la soluzione più compatibile da utilizzare al di fuori di PHP. Puoi leggere facilmente JSON in Javascript o in altre lingue. – barell

3

Utilizzare la funzione PHP serialize() per convertire gli array in stringhe. Queste stringhe possono essere facilmente memorizzate nel database MySQL. Usando unserialize() possono essere convertiti nuovamente in array, se necessario.

+2

prima di salvare $ store = serizalize ($ someData); $ sql = "inserire nel valore PaypalLogs (' store', 'created') ('{$ store}', NOW())"; dopo $ someData = unserizalize ($ row ['store']); – Sergey

8

Il modo in cui sono fatte le cose è con serializzare la matrice, che significa "fare una stringa fuori di esso". Per comprendere meglio questo, date un'occhiata a questo:

$array = array("my", "litte", "array", 2); 

$serialized_array = serialize($array); 
$unserialized_array = unserialize($serialized_array); 

var_dump($serialized_array); // gives back a string, perfectly for db saving! 
var_dump($unserialized_array); // gives back the array again 
0
<?php 
$myArray = new array('1', '2'); 
$seralizedArray = serialize($myArray); 
?> 
3

per convertire qualsiasi array (o qualsiasi altro oggetto) in una stringa utilizzando PHP, chiamare la funzione serialize:

$array = array(1, 2, 3); 
$string = serialize($array); 
echo $string; 

$ stringa ora manterrà una versione stringa dell'array. L'output del codice sopra è il seguente:

a:3:{i:0;i:1;i:1;i:2;i:2;i:3;} 

Per convertire indietro dalla stringa alla matrice, utilizzare unserialize:

// $array will contain (1, 2, 3) 
$array = unserialize($string); 
Problemi correlati