0

我知道这个问题的解决方案非常简单,但我错过了一些东西。

我有一个充满人名的数据库。大多数将显示为@ URL,如下所示:

MySite/People/Abraham_Lincoln

但是,仅在华盛顿州重要的人将显示为@ URL,如下所示:

MySite/People/Washington/Gary_Locke

Abraham Lincoln 很简单,因为数据库表中的值字段 URL (Abraham_Lincoln) 与 URL (Abraham_Lincoln) 匹配。但是,数据库值 Gary_Locke 与 URL Washington/Gary_Locke 不匹配。

所以我试图修改我的查询,以便如果一个人与华盛顿(WHERE Site = 'WA')相关联,则网页 URL($MyURL)将不等于数据库表字段 URL,而是华盛顿/+ URL。

但是如何附加“华盛顿/”和 URL?当我在 SQL 中测试以下查询时,它返回 0 个结果,并且它在我的 PHP 页面中根本不起作用。

$result = mysql_result(mysql_query("SELECT COUNT(URL)
FROM people
WHERE URL = '$MyURL' AND Site = 'PX'
OR '$MyURL' = 'Washington/'URL AND Site = 'WA'"),0);

因此,再次强调,如果我关注的是 Gary Locke(字段 URL 中的 Gary_Locke),那么我希望能够在 MySite/People/Washington/Gary_Locke,而不是 MySite/People/Gary_Locke 上显示有关他的信息。

谁能告诉我我做错了什么?谢谢。

4

1 回答 1

1

Concat 将加入华盛顿到 URL 见下文

$result = mysql_result(mysql_query("SELECT COUNT(URL)
FROM people
WHERE URL = '$MyURL' AND Site = 'PX'
OR '$MyURL' = CONCAT('Washington/', URL) AND Site = 'WA'"),0);

我也可以建议这样做,这样如果你有一个sql错误,它会显示错误,这样你就可以知道哪里出了问题

$res = mysql_query("SELECT COUNT(URL)
FROM people
WHERE URL = '$MyURL' AND Site = 'PX' 
OR '$MyURL' = CONCAT('Washington/', URL) AND Site = 'WA'");

if (!$res) {
    die('Invalid query: ' . mysql_error());
}

$result = mysql_result($res, 0);

我也希望你逃避你的参数,这会成功。(如果您不确定为什么这是一个好主意,请搜索 sql injection)

$MyURL = mysql_real_escape_string($MyURL); 

最后,mysql_ 函数集将很快从最新版本的 php 中删除。如果这是一个长期项目,您应该查看 mysqli 或 pdo。

于 2013-08-12T06:18:19.140 回答