使用in-if-else语句查询具有多个结果的结果


query result with multiple results with in if else 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'];

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

您必须使用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();
}

为什么不检查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注入是有用的。

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循环将带来所有值。。。

您用于检查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%以上的资源。

希望你现在清楚了。

谢谢。

您需要一个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'];
 }