当前位置: 首页 > 面试题库 >

PHP无需数据库查询即可执行SQL LIKE匹配的方法?

巢星纬
2023-03-14
问题内容

我想将输入字符串匹配到我的PHP页面,就像通过SQL(MySQL)中的LIKE命令所做的匹配一样,以确保其他搜索的一致性。由于(我已经看过但不理解)某些PHP语法包含SQL命令,所以我想知道这是否可能吗?

这样做的原因是,我现在正在实现对关键字的搜索,而不是对存储在序列化数组中的数据库中的字段的搜索,我必须在PHP中对其进行反序列化,并根据数组的结构进行搜索。我无法针对该表进行查询,只需要查询的匹配功能即可。否则,我需要找到一个替代的匹配例程,这将是不一致的。我不能回过头来重新构建数据库,因为在规范中并没有预料到这点。是的,我需要一个难看的技巧,但是我正在寻找最优雅的东西。

如果不可能的话,我可以使用将用户键入的文本匹配为存储文本的关键字的任何建议。

编辑(为澄清起见):我的主要问题是我对LIKE命令的工作方式没有足够的了解(仅复制代码),并且由于关键字暗示了某种程度的模糊性,如果我改用,我希望保留这种模糊性正则表达式。我对regex的好点是更好。我的查询是“喜欢’matchme%’”


问题答案:

更新

根据tomalak的评论和OIS使用preg_grep的绝妙想法,这可能更符合最终解决方案的要求。

<?php

function convertLikeToRegex( $command )
{
    return "/^" . str_replace( '%', '(.*?)', preg_quote( $command ) ) .  "$/s";
}

function selectLikeMatches( $haystack, $needle )
{
    return preg_grep( convertLikeToRegex( $needle ), $haystack );
}

$likeClauses = array(
    '%foo'
    ,'foo%'
    ,'%foo%'
);

$testInput = array(
    'foobar'
    ,'barfoo'
    ,'barfoobaz'
);

foreach ( $likeClauses as $clause )
{
    echo "Testing $clause:";
    echo '<pre>';
    print_r( selectLikeMatches( $testInput, $clause ) );
    echo '</pre>';
}

下面的原始帖子

这是您追求的目标吗?

<?php

function convertLikeToRegex( $command )
{
    return "/^" . str_replace( '%', '(.*?)', $command ) .  "$/s";
}

$likeClauses = array(
    '%foo'
    ,'foo%'
    ,'%foo%'
);

$testInput = array(
    'foobar'
    ,'barfoo'
    ,'barfoobaz'
);

foreach ( $testInput as $test )
{
    foreach ( $likeClauses as $clause )
    {
        echo "Testing '$test' against like('$clause'): ";
        if ( preg_match( convertLikeToRegex( $clause ), $test ) )
        {
            echo 'Matched!';
        } else {
            echo 'Not Matched!';
        }
        echo '<br>';
    }
    echo '<hr>';
}


 类似资料:
  • 问题内容: 我想有一个不连接数据库就表现为mysql_real_escape_string的功能,因为有时我需要在没有数据库连接的情况下进行干式测试。mysql_escape_string已被弃用,因此是不可取的。我的一些发现: http://www.gamedev.net/community/forums/topic.asp?topic_id=448909 http://w3schools.in

  • 本文向大家介绍php连接oracle数据库及查询数据的方法,包括了php连接oracle数据库及查询数据的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php连接oracle数据库及查询数据的方法。分享给大家供大家参考。具体分析如下: php有强大的功能不但可以支持mysql,mssql,mysqli之个我们还可以与oracle数据连接,要让php支持oracle非常的简单我们只要把

  • 问题内容: 较早的mysql扩展具有连接标志,但是我找不到 mysqli的 等效项。 我有一个查询,想知道其子句 匹配 了多少行,而不是实际更改了多少(如所示)。 到目前为止,我发现的唯一方法是使用正则表达式进行解析(看起来像)。但这似乎很hack。 问题答案: 在的选项中。 在PHP 5.3中的PDO :: MySQL中也进行了介绍。

  • 问题内容: 我从MySQL迁移到MS SQL Server,并尝试从例程表中获取所有数据。我已连接,但不确定如何使用sqlsrv获取数据。这是我走了多远: 问题答案: 首先,如果我没记错,则将结果存储 到其中, 并且该结果不是类obj它的资源,因此请删除 此示例将连接,然后从中获取返回的资源

  • 问题内容: 这是一个分为两个部分的问题。 我的文档如下所示: 我的第一个问题是如何检索“ title” 恰好是 “ No Title”的所有文档。我不希望出现标题为“此文档没有标题”的文档。 我的第二个问题是如何检索“ URL” 恰好 出现在一长串URL中的所有文档。 我正在使用pyelasticsearch,但是在curl中使用通用答案也可以。 问题答案: 如果您存储了源代码(这是默认设置),则

  • 我正在使用Jacoco使用ANT查找单元测试的代码覆盖率,但报告没有生成,我得到了这个错误序列: 我已经阅读了这些答案,但似乎没有一个可以帮助我解决问题。 Jacoco代码覆盖报告生成器显示错误:“捆绑包‘代码覆盖报告’中的类与执行数据不匹配” jacoco:对于报告生成,必须使用与运行时相同的类文件 我在Eclipse上编译了所有类,并使用ANT构建工具对这些类执行代码覆盖。由于一些依赖关系,我