2013-05-22 39 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

我仍然不相信貓叫貓應該讓任何特殊的感覺。 –

相關問題