2

如果您不想获得我想要做的事情的完整摘要,请跳到(问题从这里开始)

我正在设置我的新站点并遇到了一个问题。

我基本上想做的是将广告分配到特定国家。因此,例如,如果您来自英国,您将看到我们在英国库存中的广告。

因此,我从 Google 收集了一些关于如何根据 IP 检测用户所在国家/地区的数据。我已经做了一个完美的功能。

$ip_address= $_SERVER['REMOTE_ADDR'];

function ip_location($ip){
    $parts = explode('.', $ip);
    $numeric_ip = $parts[3] + (256 * $parts[2]) + (256 * 256 * $parts[1]) + (256 * 256 * 256 * $parts[0]);

    $sql = "SELECT country FROM iptocountry WHERE lower_bound <= $numeric_ip AND upper_bound >= $numeric_ip LIMIT 1";
    $result = mysql_query($sql);
    $country = mysql_result($result, 0);
    return $country;
}

$country = ip_location($ip_address);
echo $country; // Always echos the correct country

(问题从这里开始)

所以这个功能很好用。在创建了这个函数之后,我创建了一个 MYSQL 查询,它使用来自该函数的数据来选择一个广告来向用户展示。

这是问题开始的地方。

当我键入此查询时:

$sql = "SELECT *  FROM `nuevo__htmlad` WHERE `country` = 'united kingdom' AND `active` = 1 ORDER BY RAND() LIMIT 1";

使用country = 'united kingdom'它工作正常,但当我把country = '$country'

没有任何效果,它从不显示广告。

任何人都可以帮助我理解为什么当我将 PHP 变量放入其中时该查询不起作用。这实际上是第一次这么简单的事情让我如此困扰。

任何帮助,将不胜感激。

4

5 回答 5

1

我通过使用 PDO 驱动程序来处理数据库来避免这种情况。这使我可以使用参数并可以轻松地重用 sql 语句。查看这篇文章了解更多信息。

于 2012-07-27T17:15:31.580 回答
1

此处提供的答案中的所有代码都包含 SQL 注入漏洞。您必须转义用户输入。

http://en.wikipedia.org/wiki/SQL_injection

于 2012-07-27T19:36:00.447 回答
0

在评论中问了几个问题后,结果发现$country变量包含和额外的空白空间。

OP 使用substr_replace ($country , '' , -1). 我个人会选择trim()

$sql = "SELECT *  FROM `nuevo__htmlad` WHERE `country` = '".trim($country)."' AND `active` = 1 ORDER BY RAND() LIMIT 1";
于 2012-07-27T19:31:01.093 回答
-1
$sql= "SELECT *  FROM nuevo__htmlad WHERE country='$country' AND active=1 ORDER BY RAND() LIMIT 1";

或者这个也试试这个

$sql= "SELECT *  FROM nuevo__htmlad WHERE country='$country' AND active=1 LIMIT 1 ORDER BY RAND()";
于 2012-07-27T16:36:34.940 回答
-1

试试这个:我总是使用这种风格,因为国家是一个字符串

$sql= "SELECT *  FROM nuevo__htmlad WHERE country='".$country."' AND active=1 ORDER BY RAND() LIMIT 1";
于 2012-07-27T16:45:58.573 回答