我有一个这样的序列化数组
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 . "; %'"
此查询是否可能导致冲突(例如重复数字等)?
是否有另一种更有效、更正确的方法来查找数组中的数字,而无需反序列化数组且无需循环?
最佳答案
这取决于您要存储的数据。对于整数,这是很有可能的。
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;}
这实际上意味着:
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
关于php - 将序列化数组作为字符串进行搜索是否安全? (MySql查询),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21580969/