【问题标题】:PDO query returns no result when querying the mysql database查询mysql数据库时PDO查询不返回结果
【发布时间】:2016-09-03 00:45:55
【问题描述】:

我正在开发一个使用 mysql 数据库存储信息的 Android 应用程序。当我的 php 代码中有以下函数时:

/*
 * Get User details
 * 
 */
public function getUserDetailsEse($email)
{
   $stmt = $this->conn->prepare("
SELECT u.title
     , u.name
     , u.surname
     , s.reg_num
     , s.barcode
     , s.prog
     , s.yos
     , s.sem
     , s.nat_id
     , s.dob
     , s.mobile
     , s.email
     , s.addr
     , s.registad_courses 
  FROM `users` u
     , `students` s 
 WHERE u.id=s.uza_id 
   AND s.email= ?
");

$stmt->bind_param("s", $email);

$stmt->execute();

if ($stmt->num_rows > 0) {
        // user existed 
        echo 'Query ran but nun';
        $stmt->close();
        return true;
    } else {
        // user not existed
        echo 'Query ddnt run';
        $stmt->close();
        return false;
    }

$stmt->close();
}

我想从 mysql 数据库中获取这些详细信息,然后将它们显示在我的 sqlite 数据库中以在应用程序中使用。然后我使用以下方法调用该函数:

$details = $db->getUserDetailsEse($email);

if ($details!=FALSE){
    $response1["error"] = FALSE;
    $response1["id"] = $details["id"];
    $response1["details"]["title"] = $details["title"];
    $response1["details"]["name"] = $details["name"];
    $response1["details"]["surname"] = $details["surname"];
    $response1["details"]["reg_num"] = $details["reg_num"];
    $response1["details"]["barcode"] = $details["barcode"];
    $response1["details"]["prog"] = $details["prog"];
    $response1["details"]["yos"] = $details["yos"];
    $response1["details"]["sem"] = $details["sem"];
    $response1["details"]["nat_id"] = $details["nat_id"];
    $response1["details"]["dob"] = $details["dob"];
    $response1["details"]["mobile"] = $details["mobile"];
    $response1["details"]["email"] = $details["email"];
    $response1["details"]["addr"] = $details["addr"];
    $response1["details"]["registad_courses"] = $details["registad_courses"];
    echo json_encode($response1);
}  else {
    $response1["error"] = TRUE;
    $response1["error_msg"] = "Failed to fetch details. Login credentials are wrong. Please try again!";
    echo json_encode($response1);
}

当我在 phpmyadmin 中运行查询时,它工作正常:

但是当我尝试在 Postman 上运行它时,我收到以下错误:

这是我要查询的 2 个表:

编辑:尝试打印 $DETAILS

【问题讨论】:

  • 你尝试打印 $details = $db->getUserDetailsEse($email);print_r($details); ?
  • @Poria 我刚试过,我在问题的编辑中添加了结果截图

标签: php android mysql sqlite pdo


【解决方案1】:

正如您在邮递员的回复中看到的,登录凭据是错误的。 您是否在 PDO 上配置了连接?

如果您使用的是 PDO,请在下方查找连接。

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>

编辑: 在我的环境中,我尝试了这个

    public function getUserDetailsEse($email)
{
    $stmt = $this->conn->prepare("
  SELECT u.title
 , u.name
 , u.surname
 , s.reg_num
 , s.barcode
 , s.prog
 , s.yos
 , s.sem
 , s.nat_id
 , s.dob
 , s.mobile
 , s.email
 , s.addr
 , s.registad_courses 
 FROM `users` u
 , `students` s 
WHERE u.id=s.uza_id AND u.email = :email
");

    $stmt->bindParam("email", $email);

    $stmt->execute();

    if ($stmt->rowCount() > 0) {
        // user existed
        echo 'Query ran but nun';
        $stmt->closeCursor();
        return true;
    } else {
        // user not existed
        echo 'Query ddnt run';
        $stmt->closeCursor();
        return false;
    }

    $stmt->closeCursor();
}

如果这仍然不起作用,那么问题不在您的查询中。

【讨论】:

  • @Antony Matignon 连接很好,这就是我刚刚使用的错误消息,它说凭据错误,您可以在上面的代码中阅读,如果您阅读第二个代码 sn-p 你会看到它
  • 哦,是的,我第一次没看到。看看$stmt = $this-&gt;conn-&gt;prepare(" SELECT u.title , u.name , u.surname , s.reg_num , s.barcode , s.prog , s.yos , s.sem , s.nat_id , s.dob , s.mobile , s.email , s.addr , s.registad_courses FROM users` u ,students s WHERE u.id=s.uza_id AND s.email= ? ");` 你有 s.email = ?,如果你用 :email 替换 ? 并在你的绑定参数 switch s 到电子邮件。它有效吗?
  • 如果你尝试使用bindParam() 没有下划线?
  • 它也不起作用,我实际上复制了你写的内容......但是我将查询分成两个单独的查询并且它有效,我想我暂时会坚持下去.. ..非常感谢!!!
猜你喜欢
  • 2015-01-29
  • 2017-05-18
  • 1970-01-01
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2014-02-25
相关资源
最近更新 更多