搜索序列化数组作为字符串是否安全? (MySql查询)

时间:2014-02-05 15:11:39

标签: php mysql arrays serialization

我有一个像这样的序列化数组

a:6:{i:0;i:6;i:1;i:65;i:2;i:56;i:3;i:87;i:4;i:48;i:5;i:528;}

例如,我想做一个像这样的

的mysql查询
$id_serialize = 6;
"SELECT id FROM table WHERE col LIKE '% i:" . $id_serialize . "; %'"

由于此查询,是否可能发生冲突(例如数字重复等)?

在没有反序列化数组且没有循环的情况下,是否有另一种更有效和正确的方法可以在数组中查找数字?

3 个答案:

答案 0 :(得分:2)

这取决于您要存储的数据。对于整数来说很有可能。

  

a:6:{i:0;i:6;i:1;i:65;i:2;i:56;i:3;i:87;i:4;i:48;i:5;i:528;}

这实际上是menas:

a:6:{...} - array of 6 elements
i:0;i:6; - first element, id 0, value 6
i:1;i:65; - second element, id 1, value 65
and so on

如果您将获得7个元素的数组,第7个元素定义将是:i:6;i:34这将与i:0;i:6;发生冲突。您的查询将返回ID为6的结果以及值为6的结果。

关于阵列解剖http://www.php.net/manual/pl/function.serialize.php#66147

的更多信息

答案 1 :(得分:1)

a:1:{i:0;s:5:"i:42;";}

糟糕。

在允许任意内容的数据格式中进行搜索非常困难。这与regexen为simply unsuited for (X|HT)ML的原因相同。您应该真正规范化数据并将每个值存储在自己的列/行中。

答案 2 :(得分:0)

如果您确定数组的内容 - 也就是说,如果您知道数组中的所有项都是数字 - 那么您应该能够毫不费力地使用您的方法。如果其他任何东西进入阵列,你可能会开始得到错误的结果。