如何查询产出值?

时间:2011-11-09 作者:user1893

我有一个我正在处理的自定义查询,我需要能够查询输出值以及实际存储的值。

示例:

$string = "This is #*&^% a test";
$string = preg_replace(\'/[^(\\x20-\\x7F)]*/\',\'\', $string);
$string_clean = $string
因此,如果我回显$string\\u clean,我将得到以下结果:

This is a test
这很好,但问题是$string\\u clean值不是存储值(只是一个输出),所以我不知道如何在查询中使用它的值,因为查询结果是基于存储的数据库值。

Im使用wordpress查询的多数组功能(here). 基本上,我在数组中使用两个键和作为meta\\u比较。

理想情况下,我希望能够查询两个值(存储和输出)。我对这个搜索功能很感兴趣。

有人能帮我吗?我该怎么做?。或者如果有人知道更好的解决方案,请告诉我。

UPDATE:

这是我正在使用的代码。我找不到任何可靠的解决方案来实现REGEXP。从理论上讲,这应该做的是使用phppreg_replace 函数删除/替换字符串中的任何特殊字符,并查询新的干净字符串,然后将在查询的参数中使用该字符串。这是:

*变量的初始值通过一个简单的html表单(不包括)提交。

if(isset($_POST[\'providername\'])) {

    $providername = $_POST[\'providername\'];

    if (preg_match(\'/[\\\'^£$%&*()}{@#~?><>,|=_+¬-]/\', $providername))
        {
            $clean = $providername; 

            // Replace other special chars
            $specialCharacters = array(
            \',\' => \'\',
            \'&amp\' => \'and\',
            \'@\' => \'at\',
            \'.\' => \'\',
            \'+\' => \'\',
            \'=\' => \'\',
            \'/\' => \'\',
            \'*\' => \'\',
            \'!\' => \'\',
            \'(\' => \'\',
            \')\' => \'\',
            \'$\' => \'\',
            \'#\' => \'\',
            \'%\' => \'\',
            \'\\\'\' => \'\',
            \'_\' => \'\',
            \'^\' => \'\',
            \'-\' => \'\'
            );

            while (list($character, $replacement) = each($specialCharacters)) {
            $clean = str_replace($character, \'-\' . $replacement . \'-\', $clean);
            }

            // Remove all remaining other unknown characters
            $clean = preg_replace(\'/[^a-zA-Z0-9\\-]/\', \' \', $clean);
            $clean = preg_replace(\'/^[\\-]+/\', \'\', $clean);
            $clean = preg_replace(\'/[\\-]+$/\', \'\', $clean);
            $clean = preg_replace(\'/[\\-]{2,}/\', \'\', $clean);

            if (preg_match(\'/[\\\'^£$%&*()}{@#~?><>,|=_+¬-]/\', $providername)) {
                $providername = $clean;
            } else {
                $providername = $_POST[\'providername\'];
            }
        }
}

if(isset($_POST[\'providerloc\'])) {
    $provider_location = $_POST[\'providerloc\'];
}
这是多数组参数:

$args = array(
    \'count_total\' => true,
    \'role\' => \'subscriber\',
    \'offset\' => 8,
    \'number\' => 8,
    \'meta_query\' => array(
    \'relation\' => \'AND\',
        array(
            \'key\' => \'jabber\',
            \'value\' => $provider_location,
            \'compare\' => \'LIKE\'
        ) ,
        array(
            \'key\' => \'keywordcontent\',
            \'value\' => $providername,
            \'compare\' => \'LIKE\'
        )
      )
);
在测试这个解决方案之后,我在尝试搜索“干净”输出值时没有得到任何结果。

例如:

如果

$value = "G-P\'s Workin\' Barn";
应用后preg_replace, 输出将为。。。

GPs仓库工作

现在如果搜索“GPs Workin Barn”(输出值),则不会得到任何结果。但当我搜索“G-P’s Workin’Barn”(原始值)时,它会显示该术语的结果。因此,查询似乎无法处理输出值。正如我所想,这是有意义的,因为查询正在搜索数据库中存储的值。。。查询应该有一种方法来解释/转换输出值,并将其与存储值进行比较。在线搜索后,与我需要的内容相关的最接近的解决方案是post\\u where filter for posts[信用@稀有]。似乎没有针对用户的类似过滤器。即便如此,我还是需要一种使用REGEXP对实际变量值进行搜索的方法。

有什么想法或解决方案吗?谢谢

1 个回复
SO网友:Rarst

您可以尝试在查询中使用筛选器(可能是posts_where) 要使其在clean值和MySQL REGEXP命令(如果适合,我自己不使用)与您的逻辑之间寻找匹配,请在原始值上运行。

结束