【问题标题】:Trying to get property of non-object in PHP PDO试图在 PHP PDO 中获取非对象的属性
【发布时间】:2015-09-05 10:18:26
【问题描述】:

我在 php.ini 的登录页面中使用了以下函数。它显示一个错误,

" 试图在...中获取非对象的属性"

function Validate($userName,$encrypted_password,$dbh)
    {
        try{
            echo ("".$userName."");
            echo ("".$encrypted_password."");
            $sql = "SELECT USERCODE,PWD FROM GUSER WHERE USERCODE = :uname AND PWD = :pwd";
            echo $sql->error;
            $query = $dbh->prepare($sql);
            $query->bindParam(':uname',$userName,PDO::PARAM_STR);
            $query->bindParam(':pwd',$encrypted_password,PDO::PARAM_STR);
            $query->execute();
            $rows = $query->fetch(PDO::FETCH_NUM);
            echo ("".$rows."");
            if($rows > 0){
                echo "Login Successfull";
                header("location: home.php");
            }
            else{
                $errmsg_arr[] = 'Username and Password are not found';
                $errflag = true;
            }
            if($errflag) {
            $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
            session_write_close();
            echo "Closed";
            exit();
            }
        }                   
        catch(PDOException $e) {
            echo 'ERROR: ' . $e->getMessage();
        }
        //return $getValue;

    }

谁能帮帮我..我是php新手..请帮忙

提前致谢

【问题讨论】:

  • 感谢@Saty 修复代码。您的 SQL 查询错误。
  • 你能解释一下查询中有什么问题吗??@Jimmy
  • 我的查询有什么问题??
  • 是的。您的查询有误。
  • 那些说他的问题是错误的——你怎么知道的? :D 你们甚至阅读并理解了他遇到的问题和错误,或者您只是开始输入 cmets?

标签: php oracle pdo


【解决方案1】:

字符串不是对象:

$sql = "SELECT USERCODE,PWD FROM GUSER WHERE USERCODE = :uname AND PWD = :pwd"; // STRING
echo $sql->error; // but you try to access it like it's an object

$sqlstring,因此它没有error 之类的属性,并且您不能像$sql->error 那样访问它,因为它是一个原始值类型。

你必须删除这一行:

echo $sql->error;

要处理 PDO 中的 SQL 错误,您必须在 PHP 中使用 try-catch 构造。 See this answer for more information about handling errors in PDO.

【讨论】:

  • 它只打印最后一个 if 语句中指定的“已关闭”。我的查询有任何错误吗?
  • 您必须删除行:echo $sql->error;。执行此操作并修复错误。
  • 我已删除。然后我在浏览器中运行我的代码。仅打印“sysman 1594 Closed”。
  • 所以错误消失了。您只是在询问此错误。你的数据库结构怎么样?也许您应该使用USER 表名而不是GUSER?这张表长什么样,在 MYSQL 中叫什么名字?
  • 它没有找到用户,因为当 $errflags 变量设置为 true 时,您正在打印 Closed。所以由于某种原因,它没有在数据库中找到用户密码组合。
猜你喜欢
  • 2015-06-13
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多