2014-11-04 134 views
0

將$ _SERVER數組插入MySQL並將其選中並恢復到PHP數組的最佳方式是什麼?使用PHP和MySQL插入和檢索服務器變量

由於存在$ _SERVER數組元素的大型擴展列表,我首先想要序列化完整數組並將數據作爲類型「text」存儲在MySQL中。如果個別元素存儲在不同的字段中,這將避免許多NULL值。因爲它只是使用一個文本字段。我認爲這樣更有效率。

當我使用json_encode將數組存儲在MySQL中,然後在恢復它時使用json_decode時,我必須使用str_replace轉義斜槓。

使用str_replace很麻煩,並且告訴我,如果我忽略需要轉義的字符,這可能會導致問題。一定會有更好的辦法。

請注意,我存儲在MySQL中的所有數據總是首先通過mysql_real_escape_string函數傳遞,這也發生在這裏。

回答

0

使用serialize()和unserialize()來代替。

http://php.net/manual/en/function.serialize.php

(使用準備從庫MySQLi或PDO報表,數據可以通過轉義文本得到殘廢)

(它是更好的辦法是使用MySQL數據類型BLOB,而不是TEXT)

+0

我嘗試序列化/反序列化之前我試過json_encode/json_decode。我不得不放棄序列化/反序列化,因爲從MySQL中選擇數據後,PHP數組是空白的。我發現在$ _SERVER上使用serialize/unserialize而不將它存儲在MySQL工程中。我現在使用BLOB而不是TEXT。 – 2014-11-04 13:12:32

+0

使用mysqli或PDO中的'prepared statements'。這樣,序列化的數據不會因文本處理而受到影響。並使用BLOB而不是TEXT – David162795 2014-11-04 13:14:50

+0

我想我可能在使用序列化/反序列化時發現了問題。從MySQL檢索數據時我使用了反斜槓。在移除這個函數時,通過反序列化來放置數據導致PHP數組被填充。感謝您的幫助。我怎麼在這裏相信你? – 2014-11-04 13:31:15