如果您不想获得我要尝试跳过的完整摘要(问题从这里开始)
我正在设置我的新网站并遇到了问题。
我基本上要做的是将广告分配给特定国家/地区。例如,如果您来自英国,您会看到我们在英国广告资源中展示的广告。
因此,我从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变量放入其中时,任何人都可以帮助我理解为什么这个查询不起作用。这实际上是第一次这么简单困扰我的事情。
任何帮助都将不胜感激。
答案 0 :(得分:1)
我通过使用PDO驱动程序来处理数据库来避免这种情况。这允许我使用参数并使重用sql语句变得容易。查看this article了解详情。
答案 1 :(得分:1)
此处提供的答案中的所有代码都包含SQL注入漏洞。你必须逃避用户输入。
答案 2 :(得分: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";
答案 3 :(得分:-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()";
答案 4 :(得分:-1)
试试这个: 我总是使用这种风格,因为country是一个字符串
$sql= "SELECT * FROM nuevo__htmlad WHERE country='".$country."' AND active=1 ORDER BY RAND() LIMIT 1";