【问题标题】:Inserting and retrieving server variables using PHP and MySQL使用 PHP 和 MySQL 插入和检索服务器变量
【发布时间】:2026-02-24 08:05:01
【问题描述】:

将 $_SERVER 数组插入 MySQL 然后选择它并将其恢复回 PHP 数组的最佳方法是什么?

由于 $_SERVER 数组元素的列表很大且不断扩展,我首先想序列化整个数组并将数据以“文本”类型存储在 MySQL 中。如果单个元素存储在单独的字段中,这将避免许多 NULL 值。因为它是我只使用一个文本字段。我认为这样更有效率。

当我使用 json_encode 将数组存储在 MySQL 中,然后在还原时使用 json_decode,我必须使用 str_replace 转义斜杠。

使用 str_replace 很麻烦,如果我忽略需要转义的字符,这可能会导致问题。一定有更好的办法。

请注意,我存储在 MySQL 中的所有数据总是首先通过 mysql_real_escape_string 函数传递,这也发生在这里。

【问题讨论】:

    标签: php mysql arrays json global-variables


    【解决方案1】:

    请改用 serialize() 和 unserialize()。

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

    (使用 mysqli 或 PDO 中的准备好的语句,因为转义文本可能会破坏数据)

    (最好使用 MySQL 数据类型 BLOB 而不是 TEXT)

    【讨论】:

    • 我在尝试 json_encode/json_decode 之前尝试了序列化/反序列化。我不得不放弃序列化/反序列化,因为从 MySQL 中选择数据后 PHP 数组是空白的。我发现在 $_SERVER 上使用序列化/反序列化而不将其存储在 MySQL 作品中。我现在使用 BLOB 而不是 TEXT。
    • 使用 mysqli 或 PDO 中的“准备好的语句”。这样序列化的数据就不会被文本处理削弱。并使用 BLOB 代替 TEXT
    • 我想我可能在使用序列化/反序列化时发现了问题。从 MySQL 检索数据时,我使用的是带斜杠。删除此函数后,通过反序列化处理数据会导致 PHP 数组被填充。谢谢您的帮助。我如何在此归功于您?
    • 干得好!谢谢你。在我的答案的左侧,有灰色的箭头按钮和灰色的“检查”按钮,点击这些。 :D