将php变量放入mysql查询

时间:2012-07-27 16:26:36

标签: php mysql

如果您不想获得我要尝试跳过的完整摘要(问题从这里开始)

我正在设置我的新网站并遇到了问题。

我基本上要做的是将广告分配给特定国家/地区。例如,如果您来自英国,您会看到我们在英国广告资源中展示的广告。

因此,我从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变量放入其中时,任何人都可以帮助我理解为什么这个查询不起作用。这实际上是第一次这么简单困扰我的事情。

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:1)

我通过使用PDO驱动程序来处理数据库来避免这种情况。这允许我使用参数并使重用sql语句变得容易。查看this article了解详情。

答案 1 :(得分:1)

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

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

答案 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";