gpt4 book ai didi

php - 匹配字段中的序列化值

转载 作者:行者123 更新时间:2023-11-30 01:28:52 25 4
gpt4 key购买 nike

请问我有一个包含两个字段IDValue 的表。字段 Value 包含使用 php 的序列化数组:

------------------------------------------------------------------------
ID | Value |
------------------------------------------------------------------------
1 | a:2:{s:1:"0";s:12:"dHJhbnNwb3J0";s:1:"2";s:16:"Y2VudHJlIHZpbGxl";}|
------------------------------------------------------------------------
2 | a:1:{s:1:"0";s:16:"Y2VudHJlIHZpbGxl";} |
------------------------------------------------------------------------
3 | a:2:{s:1:"0";s:12:"Y29tbWVyY2U=";s:1:"2";s:12:"dHJhbnNwb3J0";} |
------------------------------------------------------------------------

在我的表单中,我有一个名为 Value 的字段,带有复选框,用户可以在其中选择多个选项,并且数据将在名为 value[]< 的数组中发送:

<form>
<input type="checkbox" name="value[]" value="dHJhbnNwb3J0" /> Value One
<input type="checkbox" name="value[]" value="Y2VudHJlIHZpbGxl" /> Value Two
<input type="checkbox" name="value[]" value="Y29tbWVyY2U" /> Value Three
<input type="submit" name="submit" value="Look for" />
</form>

我想选择序列化字段中存在字段值的数据,所以我想在mysql中使用REGEXP并且我尝试过

$clause = '';
for($i = 0 ; $i < $c; ++$i)
$clause .= " OR Value REGEXP '{$_POST['value'][$i]}';

// This is the query used :
$q = " SELECT * FROM TABLE WHERE value = '{$_POST['value'][0]}' $clause ";

但这不符合我的需要。

如何正确地做到这一点?

最佳答案

你可以尝试这样的事情:

if (!empty($_POST['value']) && is_array($_POST['value'])) {
$re = '"(' . implode('|', array_map('preg_quote', $_POST['value'])) . ')"';
$q = "SELECT * FROM TABLE WHERE value REGEXP '$re'";
// execute query, proceed results
}

您的架构仍然错误,这是询问数据库的错误方法。您应该重新考虑存储值的方式:序列化数据不适合在搜索条件中使用。

关于php - 匹配字段中的序列化值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17694589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com