我有一个像这样的序列化数组
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 . "; %'"
由于此查询,是否可能发生冲突(例如数字重复等)?
在没有反序列化数组且没有循环的情况下,是否有另一种更有效和正确的方法可以在数组中查找数字?
答案 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)
如果您确定数组的内容 - 也就是说,如果您知道数组中的所有项都是数字 - 那么您应该能够毫不费力地使用您的方法。如果其他任何东西进入阵列,你可能会开始得到错误的结果。