在SQL中反序列化PHP数组

时间:2014-04-08 18:12:40

标签: php mysql sql serialization deserialization

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

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

1 个答案:

答案 0 :(得分:1)

序列化的PHP数据只是一个字符串,所以对于"简单"搜索,你可以使用基本的MySQL字符串操作。

e.g。序列化数组有一个name参数,你需要匹配它,所以

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

会产生

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

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

e.g。你可能最好还是整个领域,在PHP中进行反序列化,然后在那里进行搜索。但是,您可以使用上述技术来最小化您必须抽取/解析的字符串总数。