如何使用 mysql 在 android 中更改密码(注册和登录工作正常,但更改密码时出现问题)

Posted

技术标签:

【中文标题】如何使用 mysql 在 android 中更改密码(注册和登录工作正常,但更改密码时出现问题)【英文标题】:how to change password in android using mysql (Registration and Login is perfectly working fine but issues in change password) 【发布时间】:2018-07-13 17:48:55 【问题描述】:
class DbOperations
    private $con;

    function __construct()
        require_once dirname(__FILE__).'/db_connected.php';
        $db = new DbConnect();
        $this->con = $db->connect();
        

    public function changePassword($pass)
        $password = md5($pass);
        $stm = $this->con->prepare("UPDATE `student` SET `password` = ?
            WHERE `username` = ?);");
        $stm->bind_param("s",$password);
        $stm->execute();

        if ($stm) 
            return true;
        
        else 
            return false;
        
     

现在这是我想在 android studio 中使用 php 脚本调用更改密码的函数。 所有其他文件都没有错,主要问题在于这个脚本名称DbOperations函数changePassword

这是修改密码脚本userChangePassword.php

<?php

    require_once '../include/db_operations.php';

    $response = array();
    if ($_SERVER['REQUEST_METHOD']=='POST') 
        if (isset($_POST['password']))
            $db = new DbOperations();
            if ($db->changePassword($_POST['password']))
                $response['error'] = false;
                $response['message'] = "Change Password Successfully";
            
            else
                $response['error'] = true;
                $response['message'] = "Password not changed";
            
        
        else
            $response['error'] = true;
            $response['message'] = "Fill all the feilds";
        
    
    else
        $response['error'] = true;
        $response['message'] = "Invalid Request";
    
    echo json_encode($response);

错误是:

致命错误:在第 69 行对 C:\xampp\htdocs\Android\include\db_operations.php 中的非对象调用成员函数 bind_param()

【问题讨论】:

【参考方案1】:

您的错误似乎表明 $stm 设置不正确。

   $stm = $this->con->prepare("UPDATE `student` SET `password` = ?
    WHERE `username` = ?);");

没有返回一个有效的对象。 __construct 函数中的所有变量都有效吗?

编辑:duskwuff 是对的,WHERE username = ?) 中的右括号不正确

【讨论】:

是的,所有变量都是有效的,因为我在数据库中注册用户时使用它,所以这意味着所有变量都工作正常【参考方案2】:
$stm = $this->con->prepare("UPDATE `student` SET `password` = ?
            WHERE `username` = ?);");
                                ^

此 SQL 语句无效——我标记的右括号(在`username` = ? 之后)在任何地方都没有匹配的左括号。这会导致prepare 调用失败。

 $stm->bind_param("s",$password);
 $stm->execute();

您还没有将值绑定到第二个参数,对应于username。该函数甚至 userChangePassword.php 脚本也没有用户名参数——它应该如何知道要更新哪个用户的密码?

【讨论】:

以上是关于如何使用 mysql 在 android 中更改密码(注册和登录工作正常,但更改密码时出现问题)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL用户设置密码后,如何免密登录

5. Hadoop集群搭建-免密互通配置 | 更改主机名-基于CentOS7-连载中

提供使用国密算法的MySQL

提供使用国密算法的MySQL

怎么解决mysql不允许远程连接的错误

ansible不使用ssh免密远程部署