使用友好URL中的数据并使用正则表达式获取mysql中的行

时间:2015-11-05 07:43:32

标签: php mysql regex

我需要编写代码,以便通过友好的URL从数据库中获取数据。

我有一个表company,其中包含字段title,用于存储有关公司的一些信息。我想使用友好的网址按标题获取数据。例如。 example.com/company/aurum-1。首先,我尝试将一些已定义的符号更改为-

function seoUrl2CompanyName($string) {
    $string = preg_replace("/[-ecsui]/","%",$string);
    return $string."%";
}  
使用

[-ecsui]是因为我的母语有非标准符号,例如我不能在我的友好网址中使用的įįį,所以我尝试将它们更改为%并使用以下mysql查找公司名称:

$SQL = "SELECT * FROM company
       "WHERE title LIKE '".seoUrl2CompanyName($_GET['company'])."';

但是如果我使用这个逻辑,当select选择返回多行时遇到一些困难。 E.g

  

example.com/company/aurum - > seoUrl2CompanyName( '金') - > a%r%m% - >   像%r%m% - >我的表中有24行用于匹配此模式

我的目标是使用来自网址的数据创建从公司表中按名称查找公司的最快方法。

2 个答案:

答案 0 :(得分:2)

我会接受来自@AgeDeO的建议,但是像这样扩展你的SQL,你获取公司名称反映的数据和你从网址获得的ID:

$SQL = "SELECT * 
        FROM company
        WHERE title LIKE '".seoUrl2CompanyName($_GET['company'])."'
        AND ID = ".$myId.";

有了这两个因素,你应该只得到一行,并且可以肯定,没有人只用2取代他的1并获得其他公司的数据。

答案 1 :(得分:1)

永远不要这样做:

  

我希望按标题获取数据

当公司名称发生变化时,您打算做什么?什么时候两家公司有相同的名字?空格,特殊字符等会发生什么......

我知道你想要友好的网址,这是可能的,只需在网址中添加公司名称作为虚拟数据。显示公司名称但不要使用它。

改为使用1,其中1是实际的公司ID。

请注意,猜测像这样的其他公司相当容易。当我更改2中的{{1}}时,我可以访问这样的其他公司。如果您不想这样做,请确保检查页面加载的权限。