【问题标题】:Fatal error: Call to a member function query() on a non-object in [duplicate]致命错误:在 [重复] 中对非对象调用成员函数 query()
【发布时间】:2017-12-09 07:24:21
【问题描述】:

连接失败:SQLSTATE[28000] [1045] 用户 'rkcat'@'localhost' 的访问被拒绝(使用密码:YES) 致命错误:在中的非对象上调用成员函数 query()

 <?php 
    $servername = "localhost";
    $username = "rkcat";
    $password = "rkcat123!@#";
    enter code here
    try {
      $conn = new PDO("mysql:host=$servername;dbname=shradha_padma", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    }
    catch(PDOException $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }

    $sql = "SELECT * FROM slider";
    $result = $conn->query($sql);
    $data = $result->fetchAll(PDO::FETCH_ASSOC);

     ?>

【问题讨论】:

  • Access denied for user 'rkcat'@'localhost'
  • 修复你的mysql安装,look here

标签: php


【解决方案1】:

由于SQLSTATE[28000] [1045] Access denied for user 'rkcat'@'localhost' 错误,您收到了Fatal error: Call to a member function query() on a non-object in 错误。

由于你的 try/catch 连接失败,PDO 对象 ($conn) 没有被初始化,因此当你通过 $conn-&gt;query($sql) 调用它时,query() 方法不存在。

要解决此问题,请找出拒绝您的用户访问的原因。 (密码错误,或数据库权限不正确)

【讨论】:

    【解决方案2】:

    数据库连接失败,更正您的连接参数,或检查用户“rkcat”是否在数据库中具有访问权限

    当您遇到连接错误时也会退出。

    【讨论】:

    • 为什么提示连接错误后OP退出?
    • exit() 或返回 0 什么的,所以如果连接失败,代码不会继续,就像在这种情况下,他没有看到连接错误,并得到第二个错误,他认为是主要错误,而不是连接错误,首先很明显,没有连接没有查询。
    • 也许我误解了您对“退出”的意图。 OP 应该尝试优雅地输出错误并关闭他的脚本;不要突然exit()die()。我有一种感觉,这也是你的意思。
    • 'echo "连接失败:" . $e->getMessage();出口();'他只会收到连接错误,而不是第二个错误,因为在他的情况下,问题出在连接上
    • 我有点跑题了,提出了一个相当琐碎的问题,但是在生产环境中执行硬 exit() 并不会被很好地接受。大多数网站都有应该显示的页脚、菜单等,即使页面的“内容”只是一条错误消息。最好让您的代码优雅地失败,而不会影响到浏览器的其余输出。我同意如果 $conn 未初始化,则不应尝试查询;但硬退出通常应该是最后的手段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多