【问题标题】:Offset 0 is invalid for MySQL result index 10 , cannot retrieve data from mysql php偏移量 0 对 MySQL 结果索引 10 无效,无法从 mysql php 检索数据
【发布时间】:2013-11-19 09:30:11
【问题描述】:

在脚本中,无论我输入正确还是错误的用户名,结果都是一样的。

是这样的:

{"success":1,"message":"登录成功!","user":{"customerID":null,"firstname":null,"lastname":null,"address":null,"邮政编码":null,"电话":null}}

我尝试使用 mysql_data_seek(),它返回 Offset 0 is invalid for MySQL result index 10.

我猜mysql_query() 没有获取任何内容。

谁能帮我解决这个问题?

 <?PHP

$username = "";
$password = "";
$re = array();


if ($_SERVER['REQUEST_METHOD'] == 'POST'){
$username = $_POST['username'];
$password = $_POST['password'];

$username = htmlspecialchars($username);
$password = htmlspecialchars($password);

//==========================================
//  CONNECT TO THE LOCAL DATABASE
//==========================================
$dbusername = ""; 
    $dbpassword = ""; 
    $host = ""; 
    $dbname = "";

$db_handle = mysql_connect($host, $dbusername, $dbpassword);
$db_found = mysql_select_db($dbname, $db_handle);

if ($db_found) {

    $username = quote_smart($username, $db_handle);
    $password = quote_smart($password, $db_handle);

    $query = "SELECT * FROM Customer WHERE username = $username AND password = md5($password)";
    $info = mysql_query($query);

//====================================================
//  CHECK TO SEE IF THE $result VARIABLE IS TRUE
//====================================================

    if ($info) {
$user = mysql_fetch_array( $info );
echo $user['firstname'];
    $re["success"]=1;
    $re["message"] = "Login successfully!";
//add parameters that will return to android
    $re["user"]["customerID"]=$user['customerID'];
    $re["user"]["firstname"]=$user['firstname'];
    $re["user"]["lastname"] = $user['lastname'];
    $re["user"]["address"]=$user['address'];
    $re["user"]["postcode"]=$user['postcode'];
    $re["user"]["phone"]=$user['phone'];

    $re= json_encode($re);
    echo $re;

        session_start();
        $_SESSION['login'] = "1";
        $_SESSION["re"]=$re;
        //header ("Location: userdata.php");

    }
    else {
    $re["success"]=0;
    $re["message"] = "User Not Found";
    $re = json_encode($re);
    echo $re;
    }
}

else {
    $re["success"]=0;
    $re["message"] = "Can not connect to database";
    $re= json_encode($re);
    echo $re;
}

}


?>


<html>
<head>
<title>Basic Login Script</title>
</head>
<body>

<FORM NAME ="Customer Login" METHOD ="POST" ACTION ="login.php">

Username: <INPUT TYPE = 'TEXT' Name ='username'  value="<?PHP print $username;?>"     maxlength="45">
Password: <INPUT TYPE = 'TEXT' Name ='password'  value="<?PHP print $password;?>"  maxlength="45">

<P align = center>
<INPUT TYPE = "Submit" Name = "Submit"  VALUE = "Login">
</P>

</FORM>

</body>
</html>

【问题讨论】:

    标签: php html mysql sql json


    【解决方案1】:

    你可以试试这个,添加行数检查mysql_num_rows($info);

            $query = "SELECT * FROM Customer WHERE username = '".$username."' AND password = '".md5($password)."' ";
    
            $info = mysql_query($query) or die("MySQL ERROR: ".mysql_error()); 
    
            $count = mysql_num_rows($info); // added rows count check
    
            if($count>0){       
    
                 $user = mysql_fetch_array( $info );
                echo $user['firstname'];
                $re["success"]=1;
                $re["message"] = "Login successfully!";
                //add parameters that will return to android
                $re["user"]["customerID"]=$user['customerID'];
                $re["user"]["firstname"]=$user['firstname'];
                $re["user"]["lastname"] = $user['lastname'];
                $re["user"]["address"]=$user['address'];
                $re["user"]["postcode"]=$user['postcode'];
                $re["user"]["phone"]=$user['phone'];    
                session_start();
                $_SESSION['login'] = "1";
                $_SESSION["re"]=$re;
                //header ("Location: userdata.php");
                $re= json_encode($re);
                echo $re;
    
            }
            else {
                $re["success"]=0;
                $re["message"] = "User Not Found";
                $re = json_encode($re);
                echo $re;
            }
    

    注意:使用 mysqli_* 函数代替 mysql_* 函数(已弃用)

    【讨论】:

    • 我添加了 mysql_num_rows($info);无论输入是什么,结果都会变为 {"success":0,"message":"User Not Found"}。 mysql_query() 没有返回任何东西给我。我该如何解决这个问题?
    • echo $query string 并在mysql查询窗口中运行以检查表customer是否有数据
    • $info = mysql_query($query) or die("MySQL ERROR: ".mysql_error());更新我的错误
    • 当然,它有数据。我已经仔细检查过了。
    • 我添加 $info = mysql_query($query) 或 die("MySQL ERROR: ".mysql_error());但没有任何改变。还是 {"success":0,"message":"User Not Found"}
    【解决方案2】:

    您需要检查if是否有任何行返回。

    session_start() 也必须在文件顶部

    session_start();
    $query = "SELECT * FROM Customer WHERE username = $username AND password = md5($password) LIMIT 1";
    $info = mysql_query($query);
    $found = mysql_num_rows($info);
    
    if($found!=0)
    {
        $user = mysql_fetch_array( $info );
        echo $user['firstname'];
        $re["success"]=1;
        $re["message"] = "Login successfully!";
        //add parameters that will return to android
        $re["user"]["customerID"]=$user['customerID'];
        $re["user"]["firstname"]=$user['firstname'];
        $re["user"]["lastname"] = $user['lastname'];
        $re["user"]["address"]=$user['address'];
        $re["user"]["postcode"]=$user['postcode'];
        $re["user"]["phone"]=$user['phone'];
    
        $re= json_encode($re);
        echo $re;
    
        $_SESSION['login'] = "1";
        $_SESSION["re"]=$re;
        //header ("Location: userdata.php");
    }
    


    注意: mysql_* 函数已弃用。继续mysqli_*功能尽快

    【讨论】:

    • 我添加了 mysql_num_rows($info);无论输入是什么,结果都会变为 {"success":0,"message":"User Not Found"}。 mysql_query() 没有返回任何东西给我。我该如何解决这个问题?
    【解决方案3】:

    如果结果集为空mysql_data_seek() 将失败并返回E_WARNING。我认为这发生在您的情况下,因为您在调用 mysql_data_seek() 之前没有检查结果集是否为空。

    如果行数>=1,请始终检查结果,然后您可以安全地调用mysql_data_seek()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 2015-12-14
      • 2019-05-15
      • 1970-01-01
      相关资源
      最近更新 更多