PHP PDO MySQL不输出结果但是其余的页面加载?

时间:2013-05-22 13:12:59

标签: php mysql pdo

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

我有以下内容,但它只输出最后的文本,而不是'echo'数据?

有人能看出我做错了吗?

<?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();  
    }  

?>

2 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:0)

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

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

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

然而,这并不能解释为什么它不起作用(在这种情况下不工作=没有回波数据)。因为它总是一个PDOStatement(或者 FALSE ,如果查询没有成功),你的if语句应该只评估为TRUE / FALSE。我认为这段代码不是没有输出的,但正如我在上面指出的那样它确实存在缺陷。