2012-11-24 10 views
5

Provare a salvare la stringa serializzata su SQL, ma poi ho problemi con la non serializzazione a causa di virgolette.Salvare su MySQL informazioni serializzate con le virgolette

esempio, stringa è "te'st", dopo serializzare abbiamo

s:5:"te'st"; 

Ma per salvarlo in SQL abbiamo bisogno di aggiungere barre, e sto facendo

serialize(addslashes($string)) 

dopo questo , nel nostro db MySQL abbiamo

s:6:"te'st"; 

E questo è il problema. s: 6 significa che abbiamo 6 simboli, ma il nostro "te'st" è solo 5, quindi quando proviamo a non serializzarlo, otteniamo un errore.

Come risolverlo? Provato htmlspecialchars e mysql_real_escape_string

Aggiornamento:

come uso mysql_real_escape_string

mysql_query("INSERT INTO `table`(`string`) VALUES ('" . serialize(array('iId' =>$aSqlResult['typeID'], 'sName' => mysql_real_escape_string($sScanResultLine))) . "')"); 

risposta

6

Si dovrebbe passare i dati tramite la funzione di fuga dopo la serializzazione, non prima - che è quello che si sta facendo ora.

$serialized = mysql_real_escape_string(serialize($data)); 

utilizzare una query parametrizzata con DOP o MySQLi e si può dimenticare la fuga del tutto.

+0

Funziona come un fascino! – MyMomSaysIamSpecial

3

Nel tuo caso la mysql_real_escape_string() è la strada da percorrere. Deve funzionare, a meno che non lo abbiate fatto in qualche modo sbagliato (nota: è necessario essere connessi al DB prima di chiamare tale funzione). E infatti dovresti usare mysqli_ o PDO, non un'estensione mysql_ che ora è deprecata. L'utilizzo di htmlspecialchars() sta semplicemente utilizzando uno strumento errato per l'attività.

codice dovrebbe essere simile a questo:

mysql_real_escape_string(serialize($string)); 
+0

U aveva ragione, io sto usando escape_string() sbagliato. – MyMomSaysIamSpecial

6

Stai facendo un errore che ho visto fare molti. Un po 'di incomprensione fondamentale su come utilizzare le funzioni di escape.

Non puoi semplicemente concatenare le funzioni di escape e finire con qualcosa che è perfetto per qualsiasi contesto. Il tuo errore è semplice ..

si sta facendo due cose:

  1. serializzazione di un oggetto (una stringa in questo caso)
  2. risparmio che nel database.

Quindi, prima di salvarlo nel database, è necessario accertarsi che il proprio valore sia correttamente sfuggito. FARE QUESTO CON MYSQLI! Le funzioni mysql_ sono morte.

L'equivalente è mysqli::real_escape_string.

Ma soprattutto .. (scusate per il trascinamento su questo) ..

serialize modifica l'uscita, si può restituire un sacco di cose .. citazioni, 0x00 's, e questo non è consentito nelle query mysql .

Così real_escape_string deve ovviamente essere l'ultimo passo! Prima serializza e sfugge l'output di quella funzione. Hai fatto l'esatto opposto.

+1

Grazie mille per questa informazione! – MyMomSaysIamSpecial

Problemi correlati