1

我正在自学做 MySQL 和 PHP。这对我来说是一个新世界,我有几本书,在问这里之前我对谷歌做了很多研究。所以我遇到了以下问题,找不到答案,我有一个 MySQL 数据库,该数据库有一个名为 URL 的特定字段。

部分 URL 字段如下所示:

&path=products&user=Mark24&id=2616

目前我已经设置好了,所以人们可以在数据库中搜索项目,效果很好。我希望能够添加到搜索功能的是按用户搜索。如您所见,用户位于整个网址的中间,所以我有这个:

    $query = "select Productid, Productname, url,  from Products where Productid like '%$keyword%' or Productname like '%$keyword%' or url like '%$keyword%' ";
    $result = mysqli_query($dbc,$query);

现在真正的问题来了,^^ 这很有效,人们实际上可以搜索用户名,它会准确显示我想要的内容。但是,如果人们在 url 中搜索单词“products”或“path”,他们将获得超过 2000 个匹配项,因为我数据库中的每个 url 都有单词 products 和 path。为什么我想避免这种情况?我不希望客户查找我们的整个数据库,我也担心服务器过载,因为每次查询客户都会获得产品的图像,以及产品名称和产品链接。尝试加载超过 2000 张图片也会减慢或崩溃我的浏览器,所以我需要以某种方式解决这个问题,但我不知道如何解决它。

那么有没有办法只匹配 URL 字段中显示 user="blah" 的部分?我用 PHP 来做这个吗,也许是预赛???

非常感谢您提供的任何信息!谢谢。

4

3 回答 3

2

为什么不多做两列呢?一个包含用户名和ID?然后,当您进行搜索时,请改为搜索这些内容。

于 2012-06-16T21:59:02.817 回答
1

试试这个:

$query = "select Productid, Productname, url,  from Products where Productid like '%$keyword%' or Productname like '%$keyword%' or url like '%user=$keyword%' ";
于 2012-06-16T22:10:59.857 回答
1

只是搜索

"%&path=products&user=%what you're searching for%"

这样,除了 path=product 参数之外,您只会返回那些具有“产品”的行。或者,mysql、postgresql 等数据库也允许您使用正则表达式,但在处理能力方面成本更高。

在正则表达式形式中,它看起来有点像这样;中间有 php 变量:

"... WHERE url REGEXP  '&path=products&user=" . $user . "&id=[0-9]+$'"

如果你使用这样的东西,那么你需要通过转义来保护你输入的值免受 sql 注入。您应该开始查看pdo以制作数据库驱动的应用程序,并使用带有绑定参数的准备好的语句来保护自己。你基本上只需要构造你的正则表达式并将它作为参数传递给绑定。

于 2012-06-16T22:06:08.670 回答