0

と の 2 つのフィールドを持つテーブルがIDありValueます。フィールド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>

シリアライズされたフィールドにフィールド値が存在するデータを選択したいのでREGEXP、mysqlで使おうと思って試してみました

$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  ";

しかし、これは私が必要とするものと一致しません。

正しく行うにはどうすればよいですか?

4

1 に答える 1

0

次のようなものを試すことができます:

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
}

それでもあなたは間違ったアーキテクチャを持っています.これはあなたのデータベースに尋ねる間違った方法です. 値を保存する方法を再考する必要があります。シリアル化されたデータは、検索条件で使用するためのものではありません。

于 2013-07-17T08:33:37.350 に答える