Php MySQL中的另一个通配符,需要匹配字符串中的几个字母吗?

Php MySQL中的另一个通配符,需要匹配字符串中的几个字母吗?,php,mysql,wildcard,Php,Mysql,Wildcard,我有个问题 我有一个包含英国邮政编码各种开头的数据库。例如,“bs”代表布里斯托尔,ba代表巴斯,等等 当有人输入完整的邮政编码时,我试图匹配。因此,它将根据邮政编码中的前几个字母给出城市 例如,有人键入“bs3 5qu”。我希望结果显示布里斯托尔,其邮政编码为“bs” 在我看来,这与通配符相反。但我想不出一个办法 这是我得到的 $location_query = mysql_query("SELECT * FROM search_locations WHERE location_postcod

我有个问题

我有一个包含英国邮政编码各种开头的数据库。例如,“bs”代表布里斯托尔,ba代表巴斯,等等

当有人输入完整的邮政编码时,我试图匹配。因此,它将根据邮政编码中的前几个字母给出城市


例如,有人键入“bs3 5qu”。我希望结果显示布里斯托尔,其邮政编码为“bs”

在我看来,这与通配符相反。但我想不出一个办法

这是我得到的

$location_query = mysql_query("SELECT * FROM search_locations WHERE location_postcode LIKE 'bs%'",$db_connect);

有什么建议吗?

如果我了解您的问题,我不是舒尔,但我认为这个问题可能会对您有所帮助

SELECT * FROM search_locations 
WHERE 'bs3 5qu' LIKE CONCAT(location_postcode,'%')
它作为“反向通配符”工作,将通配符连接到位置\邮政编码,而不是用户的输入

如果我们假设邮政编码为2个字符长,另一个选项是使用mysql LEFT函数获取子字符串,如下所示:

SELECT * FROM search_locations
WHERE location_postcode LIKE LEFT('bs3 5qu', 2)

希望有帮助

这个问题更多的是关于Web服务器代码,而不是数据库。如果您使用PHP检索用户的输入,下面是一个示例:


我认为这可能会有所帮助:

mysql_query("

SELECT
    location_postcode,
    CASE SUBSTRING('".$_POST['user_postal_search']."', 1, 2)
        WHEN 'bs' THEN 'Bristol'
        WHEN 'ba' THEN 'Bath'
        ELSE 'Unknown City'
    END CASE as City
FROM
    search_locations
WHERE
    location_postcode LIKE '".$_POST['user_postal_search']."%'

");
此外,如果您不想让SQL server处理子字符串,请让PHP处理:

mysql_query("

SELECT
    location_postcode,
    CASE '".substr($_POST['user_postal_search'], 0, 2)."'
        WHEN 'bs' THEN 'Bristol'
        WHEN 'ba' THEN 'Bath'
        ELSE 'Unknown City'
    END CASE as City
FROM
    search_locations
WHERE
    location_postcode LIKE '".$_POST['user_postal_search']."%'

");

好的,各位。目标是有一个搜索框,用户可以搜索邮政编码或位置

数据库的设置如下所示:

location_id   location_name   location_postcode
1             bristol         bs
2             glasgow         g
有些邮政编码仅以一个字母开头,有些则以两个字母开头,如上面的数据库示例所示。现在,下面的代码将$location_search变量更改为第一个字母(如果它是只有一个字母的邮政编码),或者两个字母(如果它是有两个字母的邮政编码)。现在,如果是像布里斯托尔这样的地方。它将忽略邮政编码,并将整个单词分配给变量$location\u search

现在我刚刚完成了这段代码。这本可以更好,但它奏效了。一旦分配给变量,您就可以使用它来运行mysql查询

<?php //Assign location ID 
    $location_word = mysql_real_escape_string($_POST["location_input"])

    if(!empty($location_word)){

        //Remove spaces
        $location_word = str_replace(" ", "", $location_word);

        //Work out if it's a postcode or a location.
        $location_3rd_character = substr($location_word, 2, 1);     //Get third character
        if(!ctype_alpha($location_3rd_character)){      //Check if it's a number or not
            $location_type = "postcode";
        }
        else {
            $location_type = "city";
        }

        if($location_type == "postcode"){       //Definding the postcode search, strip down to first or second letter.
            $location_2nd_character = substr($location_word, 1, 1);

            if(!ctype_alpha($location_2nd_character)){   //Trim postcode down to one letter, if only one letter in postcode.
                $location_search = substr($location_word, 0, 1);
            }
            else {      //Trim postcode down to two letters, if only two letter in postcode.
                $location_search = substr($location_word, 0, 2);
            }
        }
        else {
            $location_search = $location_word;  
        }
?>


您可以分享您的表格说明吗?搜索位置中的列是什么?“有人键入'bs3 5qu'。我希望结果显示布里斯托尔,其邮政编码为'bs'-您的代码应该已经这样做了。你是说它做不到这一点吗?是的,我当前的代码不起作用。你是在寻找一个组合,并且给出的答案对你有帮助吗?或者你需要更多的帮助来解决你的问题?这么多不必要的代码。只需将准备好的语句与未弃用的API一起使用(
mysqli\uuu
PDO
)是的,准备好的语句更好,但我开始讨论DB使用什么方法。请不要直接在SQL查询中插入$\u POST变量。看@BillKarwin你是对的。OP不要像我展示的那样使用
$\u POST
,它只是为了证明SQL的概念。了解如何使用准备好的语句并绑定变量,以便DBMS能够正确地转义所有内容。