首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于MySQL结果索引10,偏移量0无效,无法从mysql php检索数据。

对于MySQL结果索引10,偏移量0无效,无法从mysql php检索数据。
EN

Stack Overflow用户
提问于 2013-11-07 16:14:51
回答 3查看 397关注 0票数 1

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

它是这样的:

{“成功”:1,“消息”:“登录成功”,“用户”:{“customerID”:空,“首名”:空,“姓氏”:空,“地址”:空,“邮政编码”:空,“电话”:空}

我尝试使用mysql_data_seek(),它返回的偏移量0对MySQL结果索引10无效。

我想mysql_query()没有获取任何东西。

有人能帮我解决这个问题吗?

代码语言:javascript
复制
 <?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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-07 16:22:58

您能试一下吗,添加行计数检查mysql_num_rows($info);

代码语言:javascript
复制
        $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_*函数(不推荐)

票数 0
EN

Stack Overflow用户

发布于 2013-11-07 16:22:04

您需要检查if --任何行返回与否。

另外,session_start()必须位于文件的顶部。

代码语言:javascript
复制
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_*函数上移动

票数 0
EN

Stack Overflow用户

发布于 2013-11-07 16:24:14

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

如果行数为>=1,则始终检查结果,然后才能安全地调用mysql_data_seek()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19840981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档