sql >> データベース >  >> RDS >> Mysql

PHP Select with PDO非オブジェクトエラーでのメンバー関数prepare()の呼び出し

    これを機能させるには、グローバル変数スコープを使用する必要があります。ここで説明します: http://php.net/manual/en/language.variables.scope.php

    $mysql_user = "NotTelling";
    $mysql_password = "DefinatelyNotThis";
    try
    {
        $dbh = new PDO("mysql:host=somehost;dbname=somename", $mysql_user, $mysql_password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        $username = $_POST['username'];
        $inPword = $_POST['password'];
        $lat =  $_POST['lat'];
        $lon =  $_POST['lon'];
    
        $loggedin = "";
        $password_hash = "";
        $loggedinstatus = "";
        $pts = "";
    
        function getLoginInfo()
        {
            global $dbh, $username, $password_hash, $loggedinstatus, $pts;
    
            $sth = $dbh -> prepare('SELECT pword, loggedin, points FROM login WHERE uname = :uname');
            $sth->bindParam(':uname', $username, PDO::PARAM_STR);
            while($row = $sth->fetch(PDO::FETCH_ASSOC))
            {
                echo $row['pword'];
                echo $row['loggedin'];
                echo $row['points'];
            }
            $password_hash = $fetch['pword'];
            $loggedinstatus = $fetch['loggedin'];
            $pts = $fetch["points"];
    
            if($password_hash === null || $loggedinstatus === null || $pts === null)
            {
                die(json_encode(array("message" => "none")));
            }
            else
            {           
                return "more";
            }
        }
    
        function checkLoginCreds()
        {
            global $dbh, $inPword, $password_hash, $loggedinstatus, $username;
    
            if(crypt($inPword, $password_hash) === $password_hash)
            {
                switch($loggedinstatus)
                {
                    case  "no":         
                        $sel = $dbh->prepare("UPDATE login SET loggedin='yes' WHERE uname = ?");
                        $sel->execute(array($username));
                        return "AllGood";
                        break;
    
                    defaut:
                        return "alreadyin";
                        break;
                }
            }
            else
            {
                return "BadLogin";
            }
        }
    
        if(getLoginInfo() === "more")
        {
            echo json_encode(array("message" => checkLoginCreds()));
        }
    
        getLoginInfo();
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
        file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
    }
    

    しかし、これはすぐに混乱する可能性があります。

    より堅牢なソリューションとして、変数を配列に配置するか、OOPを使用することをお勧めします: http ://php.net/manual/en/language.oop5.php



    1. INNER JOINまたはMINで更新しますか?

    2. MySQLはCSVから単一の行のみをインポートします

    3. Mysqlは、コンマ区切りのフィールドを単一の文字列と比較します

    4. 1つのSQLクエリで複数のカウントを取得するにはどうすればよいですか?