在if else语句中使用多个结果查询结果

时间:2013-04-06 09:54:35

标签: php mysql if-statement

我目前正在制作一个脚本,该脚本可以允许ip不在查询中去网站。但我目前的问题是我只允许查询的第一个结果通过,第二个结果不是其余的结果。

require_once("../mysql.php"); 
$ip = $_GET['ip'];
$sql = "SELECT DISTINCT ip FROM servers WHERE status = 1";
$res = mysql_query($sql) or die(mysql_error());
$allow = mysql_fetch_assoc($res);
if ($ip != $allow['server']) {
    echo 'IP is not allowed!';
    die ();
}
$port = $_GET['port'];

在这种情况下我做错了什么?

5 个答案:

答案 0 :(得分:0)

您需要for循环,否则您将只获得查询的最后一行!

$allow = mysql_fetch_assoc($res);

应该成为

while($allow = mysql_fetch_assoc($res){
     if ($ip != $allow['server']) {
          echo 'IP is not allowed!';
          continue;
      }else
         $port = $_GET['port'];
 }

答案 1 :(得分:0)

您必须使用while循环:

$ipAllowed = false;
while ($allow = mysql_fetch_assoc($res))
    if ($ip == $allow['server']) {
        echo 'IP is allowed!';
        $ipAllowed = true;
        break;
    }
if (!$ipAllowed) {
    echo 'IP is not allowed!';
    die();
}

或简单地使用(更快的方法):

$sql = "SELECT ip FROM servers WHERE status = 1 AND ip = '".mysql_real_escape_string($ip)."'";
$res = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($res) === 0) {
    echo 'IP is not allowed!';
    die();
}

答案 2 :(得分:0)

为什么不检查SQL查询中的IP?

require_once("../mysql.php"); 
$ip = $_GET['ip'];
$sql = "SELECT count(*) FROM servers WHERE status = 1 AND IP = '".$ip."'";

之后,您可以检查SQL语句的返回值是否大于“0”。如果为true,则ip地址在数据库查询中。否则ip不包括在表中。也许它有助于逃避$ ip变量以防止sql注入。

答案 3 :(得分:0)

require_once("../mysql.php"); 
$ip = $_GET['ip'];
$sql = "SELECT DISTINCT ip FROM servers WHERE status = 1";
$res = mysql_query($sql) or die(mysql_error());
while($allow = mysql_fetch_assoc($res))
{
    if ($ip != $allow['server']) {
    echo 'IP is not allowed!';
    die ();
    }
    else
    { $port = $_GET['port']; }

}

使用while循环将带来所有价值......

答案 4 :(得分:0)

用于检查IP地址的方法似乎根本没有优化,您正在为数据库中的所有可用IP进行while循环,然后检查您的字段的单个IP。

而不是必须使用特定IP地址或IP地址范围过滤查询,因此SQL将根据这种情况向您发送结果,因此,您的应用程序不会使用任何操作资源

你可以这样做,

$query = mysql_query("SELECT ipAddress as Record FROM YOURTABLENAME where status=1 and IP =".$ip);

if(mysql_num_rows($query)>0)
{
  //IP found do you logic here.
}
else
{
  //IP not found do you logic here.
}

这将节省您使用的超过75%的资源。

希望你现在清楚。

感谢。