0

我试图根据表中结果的数量运行不同的查询。

我有以下内容,但它只输出最后的文本,而不是“回声”数据?

谁能看到我做错了什么?

<?php

require 'dbconfig.php';

class User {

    function checkUser($uid, $oauth_provider, $username, $email, $twitter_otoken, $twitter_otoken_secret) 
    {

        $query = "SELECT * FROM `users` WHERE oauth_uid = '$uid' and oauth_provider = '$oauth_provider'";

        $result = $DBH->query($query);

        if (!empty($result)) {
                echo 'user';
        } else {
                echo 'no user';
        }

        $DBH = null;

    }

}
?>



Test page loads

打电话给班级

在另一页上,我用下面的方式给我的班级打电话

    ...else {
       $twitter_otoken=$_SESSION['oauth_token'];
       $twitter_otoken_secret=$_SESSION['oauth_token_secret'];
       $email='';
        $uid = $user_info->id;
        $username = $user_info->name;
        $user = new User();
        $userdata = $user->checkUser($uid, 'twitter', $username,$email,$twitter_otoken,$twitter_otoken_secret);
        if(!empty($userdata)){
            session_start();
            $_SESSION['id'] = $userdata['id'];
 $_SESSION['oauth_id'] = $uid;
            $_SESSION['username'] = $userdata['username'];
            $_SESSION['oauth_provider'] = $userdata['oauth_provider'];
            header("Location: splash.php");
        }
    }
} else {
    // Something's missing, go back to square 1
    header('Location: login-twitter.php');
}
?>

配置

$host = 'localhost';
$dbname = 'dbname was here';
$user = 'access';
$pass = 'access';

try {
  $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
  $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

    } catch(PDOException $e) {  
        echo $e->getMessage();  
    }  

?>
4

2 回答 2

1

它应该是什么

配置

$host = 'localhost';
$dbname = 'dbname was here';
$user = 'access';
$pass = 'access';

$opt = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass, $opt);

用户

class User {

    function checkUser($uid, $oauth_provider) 
    {
        global $DBH;

        $query = "SELECT * FROM `users` WHERE oauth_uid=? and oauth_provider=?";
        $stmt  = $DBH->prepare($query);
        $stmt->execute($uid, $oauth_provider);
        return $stmt->fetch();
    }
}
于 2013-05-22T14:05:00.190 回答
0

您正在检查语句是否为空(),但 PDO::query() 的结果是 PDOStatement 对象,而不是结果数据。

要获取数据,请查看PDOStatement的文档。您可以使用类似fetchObject()方法的方法。

此外,我建议使用 PDO 使用Prepared Statements的能力,而不是直接查询。这将使您的应用程序更加安全。

然而,这并不能解释为什么它不工作(在这种情况下不工作 = 没有回声数据)。由于它始终是 PDOStatement(或FALSE,以防查询失败),因此您的 if 语句应该只计算为 TRUE/FALSE。我认为不是这段代码导致没有输出,但正如我在上面指出的那样,它确实存在缺陷。

于 2013-05-22T13:20:04.920 回答