2013-05-22 38 views
0

我试图运行不同的查询,取决于表的结果数量。PHP PDO MySQL不输出结果,但页面加载的其余部分?

我有以下,但它只输出文本在最后,而不是'回声'数据?

任何人都可以看到我做错了什么?

<?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

你甚至称'checkUser'功能?你到目前为止调试了什么? – Rikesh

+1

你没有使用PDO的美丽。准备好的声明!这只是让你的系统容易受到SQL注入攻击的另一种方式。:( –

+0

你在哪里创建$ DBH?你应该使用它作为例如类继承的类字段或者作为单例/注册表模式。 – Robert

回答

0

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

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

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

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

+0

检查我的最后一句。 –

+0

是的,你已经编辑了你的答案,但你的答案仍然没有解决问题,你甚至在帖子中提到它不会解决他的问题。 – Robert

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

你不得不承认,当你在那里输入'global'关键字时你感觉不好:) –

+0

我仍然不相信猫叫猫应该让任何特殊的感觉。 –

相关问题