配售PHP变量到MySQL查询
如果你不想得到什么,我试图做跳到(问题从这里开始)配售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变量。这实际上是第一次这么简单,让我感到非常困扰。
任何帮助,将不胜感激。
$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()";
试试这个: 我一直以来的国家是一个字符串中使用这种风格
$sql= "SELECT * FROM nuevo__htmlad WHERE country='".$country."' AND active=1 ORDER BY RAND() LIMIT 1";
错了。如果没有[适当的SQL转义],你就会赢得一个例子(http://bobby-tables.com/php.html)。 – tadman 2012-07-27 20:41:26
我避免这种用PDO驱动程序用于处理数据库。这使我可以使用参数并使重复使用sql语句变得容易。查看this article了解更多信息。
这是正确的答案。 – tadman 2012-07-27 20:40:50
所有在这里提供的答案代码包含SQL注入漏洞。你必须逃避用户输入。
[Bobby Tables](http://bobby-tables.com/php.html)网站有很好的介绍。 – tadman 2012-07-27 20:39:08
首先打印您的查询'echo $ sql;'并向我们显示结果。 – Tchoupi 2012-07-27 16:28:59
@MathieuImbert说了什么,但要澄清,告诉我们'echo $ sql'在硬编码国家和变量使用中都显示了什么。 – Ally 2012-07-27 16:31:59
您可以简单地执行INSERT .... VALUES(INET_ATON('$ ip'))'并保存自己的PHP端数学。这在某些时候会炸毁32位php安装。 – 2012-07-27 16:32:56