警告:mysql_result()[function.mysql-result]:无法跳转到MySQL结果索引2的第0行

时间:2012-10-30 08:23:53

标签: php mysql restrict

我正在尝试这样做,所以我可以将“staff panel”限制为“member_level”位于“3”的用户,以便其他人被重定向到account_page.php,但我目前收到的错误只会出现1小时以前,这出现了,我没有改变它刚刚出现的任何东西。

这是职员小组的代码:

<?php
    ob_start();
mysql_connect('localhost', 'u1908470_cms', 'BeingX1309X')or die("Error: ".mysqlerror());
mysql_select_db('u1908470_cms'); 

$query1 = mysql_query("SELECT 'member_level' FROM `users` WHERE `username` = '" . mysql_real_escape_string ($_SESSION['user']['username'])."'");
$query2 = mysql_result($query1,0,'member_level') or die(mysql_error());

switch ($query2)
{
case 3: 
  {
  echo "<p>Now Logged into Staff Panel!</p>";

  }
  break;

case 2:
  {
  header("location: http://www.cookiedenied.com/account_page.php"); 
  }
  break;

case 1:
  {
  header("location: http://www.cookiedenied.com/account_page.php"); 
  }
  break;

}
?>

4 个答案:

答案 0 :(得分:1)

正确转义字段和表格名称

而不是

    SELECT 'member_level', ....

...请使用......

    SELECT `member_level`, ....

验证您的查询。

重写你的代码:

$SQL = "SELECT `member_level`
    FROM `users` 
    WHERE `username` = '" 
    . mysql_real_escape_string($_SESSION['user']['username'])
    . "'";

$MyQ = mysql_query($SQL);
$MyR = mysql_result($MyQ,0,'member_level') or die(mysql_error());

...和var_dump($SQL);查看您的陈述是否有效。使用另一个MySQL工具(Workbench,phpMyAdmin,SQLyog或其他)执行它时检查它,看它是否生成任何结果。也许$_SESSION变量没有正确设置或类似的东西,你会发现这种方式。

请改用MySQLi或PDO。

从手册:

  

不鼓励使用mysql扩展。相反,MySQLi或   应该使用PDO_MySQL扩展名。

重新格式化switch - 阻止。

与您的问题无关,但您的switch - Block看起来过于复杂,无法轻松实现某些目标。试试这个:

switch ($query2) {
    case 3: 
        echo "<p>Now Logged into Staff Panel!</p>";
        break;
    default:
        header("location: http://www.cookiedenied.com/account_page.php"); 
}

答案 1 :(得分:0)

试试这个:

$R = mysql_fetch_assoc($query1);
$query2 = $R["member_level"]

但您可能应该检查您的查询至少返回1行。

答案 2 :(得分:0)

首先尝试避免mysql_query。这已经过时,养成了使用PDO的习惯。

在您的查询中,您使用引号包围了表名。删除引号并尝试。

更改代码。并替换为以下代码。

<?php
ob_start();
try {

      $pdo = new PDO('mysql:host=localhost;dbname=u1908470_cms', 'u1908470_cms','BeingX1309X');

} catch (PDOException $e) {

      print "Error!: " . $e->getMessage() . "<br/>";
      die();

}

$username = $_SESSION['user']['username'];
$statement = $pdo->prepare("select `member_level` from `users` where username = :username");
$statement->execute(array(':username' => $username));
$row = $statement->fetch();

$member_level = $row['member_level'];
switch ($member_level)
{
    case 3: {
        echo "<p>Now Logged into Staff Panel!</p>";
        break;
    }
    default:{

        header("location: http://www.cookiedenied.com/account_page.php"); 
        break;
    }
}

您实际上可以删除switch语句,只需输入if-else条件。

if($member_level == 3) {

  echo "<p>Now Logged into Staff Panel!</p>";

}else{

  header("location: http://www.cookiedenied.com/account_page.php"); 

}
?>

答案 3 :(得分:0)

为什么您的查询中'周围table name,可能会返回

$query1 = mysql_query("SELECT `member_level` FROM `users` WHERE `username` = '" . mysql_real_escape_string ($_SESSION['user']['username'])."'") or die(mysql_error());

使用or die(mysql_error());检查查询中的错误。