【问题标题】:Android Error: Value <br of type java.lang.String cannot be converted to JSONObjectAndroid 错误:java.lang.String 类型的值 <br 无法转换为 JSONObject
【发布时间】:2020-04-02 04:16:45
【问题描述】:

目前,我创建了一个具有登录功能的应用程序。要从 android 连接到 MySQL 数据库,我使用 PHP。当我使用 MySQLi 时,一切正常。但是当我转换为 PDO 时,错误将与我的问题标题相同。谁能知道是什么问题?以下是我的 PHP 代码:

<?php 

    require_once 'configPDO.php';

    $response = array();

        if(isTheseParametersAvailable(array('badgeid', 'pwd'))){

            $badgeid = $_POST['badgeid'];
            $pwd = $_POST['pwd']; 

            $stmt = $conn->prepare("SELECT badgeid, email, fullname, roles_id, team_id FROM users WHERE badgeid = :badgeid AND pwd = :pwd AND roles_id = 3");
            // $stmt->bind_param("ss",$badgeid, $pwd);

            $stmt->bindParam(':badgeid',$badgeid,PDO::PARAM_STR);
            $stmt->bindParam(':pwd',$pwd,PDO::PARAM_STR);
            $stmt->execute();

            //$stmt->store_result();

            if($stmt->rowCount() > 0){

                $stmt->bindParam($badgeid, $email, $fullname, $roles_id, $team_id);
                $stmt->fetch();

                $user = array(
                    'badgeid'=>$badgeid, 
                    'email'=>$email,
                    'fullname'=>$fullname,
                    'roles_id'=>$roles_id,
                    'team_id'=>$team_id
                );

                $response['error'] = false; 
                $response['message'] = 'Login successfull'; 
                $response['user'] = $user; 
            }else{
                $response['error'] = false; 
                $response['message'] = 'Invalid username or password';
            }
        }
    echo json_encode($response);

    function isTheseParametersAvailable($params){

        foreach($params as $param){
            if(!isset($_POST[$param])){
                return false; 
            }
        }
        return true; 
    }

【问题讨论】:

  • 这里好像遇到了服务器错误。查看从服务器返回的原始响应(在转换为 JSON 之前)。
  • 原始响应是什么意思?
  • 在将其转换为 JSON 之前,您从服务器获得的原始响应。您的客户端 (android) 代码看起来如何?
  • @CodyKL 你想帮助我吗?我可以给android代码
  • @Dharman 你能指出错误在哪里吗?

标签: php mysql pdo


【解决方案1】:

if 条件中的第二个bindParam()(您应该阅读并了解此方法的具体作用!)是无稽之谈!

改变这个:

if($stmt->rowCount() > 0){

    $stmt->bindParam($badgeid, $email, $fullname, $roles_id, $team_id);
    $stmt->fetch();

    $user = array(
        'badgeid'=>$badgeid, 
        'email'=>$email,
        'fullname'=>$fullname,
        'roles_id'=>$roles_id,
        'team_id'=>$team_id
    );

到这里:

$result = $stmt->fetch(\PDO::FETCH_ASSOC); // Get results as array
if ($result) {
    // Since we only get the fields we want to send back, you can assign `$result` directly to `$response['user']`
     $response['user'] = $result; 

PHP 抛出了一个相关错误,您会在请求的原始响应中看到该错误!

【讨论】:

  • 获取(\PDO::FETCH_ASSOC)?
  • fetch 里面有什么?
  • fetch() 默认使用\PDO::FETCH_BOTH,由于我们想直接通过字段名称访问结果,所以我们将\PDO::FETCH_ASSOC设置为获取样式,这样可以减少数组,否则每个都有列值 2 个条目,1 个带有编号键,一个带有字段名称作为键。更多信息请参考php.net/manual/en/pdostatement.fetch.php
  • 我已经更新了上面的代码,这里不需要$stmt-&gt;rowCount() &gt; 0,你可以直接查看$result
  • 仍然有错误。我在这里更新了我的问题,看看stackoverflow.com/questions/59259039/…
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 2017-08-12
  • 2021-10-23
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多