【问题标题】:Unserializing PHP array in SQL在 SQL 中反序列化 PHP 数组
【发布时间】:2014-05-21 14:52:13
【问题描述】:

我正在开发的旧系统中的一位前开发人员使用 PHP serialize() 将一组数据扁平化到 MySQL 表的一列中。

我需要编写一个涉及此列的复杂查询。有没有办法在 SQL 查询中反序列化数据(即使它是逗号分隔的字符串),还是我需要将结果传递回 PHP?

【问题讨论】:

标签: php mysql sql serialization deserialization


【解决方案1】:

序列化的 PHP 数据只是一个字符串,因此对于“简单”搜索,您可以使用基本的 MySQL 字符串操作。

例如序列化数组有一个name 参数,你需要与之匹配,所以

... WHERE LOCATE(CONCAT('s:', LENGTH('foo'), ':foo') ,serializeddatafield) > 0

会产生

WHERE LOCATE('s:3:foo', serializeddata) > 0

但是,这会在数据中的任何位置找到值为fooANY 字符串,而不必在您想要的特定数组字段中。

例如您最好抽出整个字段,在 PHP 中反序列化,然后在那里进行搜索。但是,您可以使用上述技术来最小化您必须提取/解析的字符串总数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2011-08-05
    相关资源
    最近更新 更多