2012-10-23 38 views
1

我正在嘗試創建一個用戶管理系統類,而我的一個函數是檢查值是否在數據庫的列中。它什麼也沒有返回。OOP:檢查值是否在數據庫中的函數

以下是相關信息:

require("opperators/connect.php"); 
class UserManagemen 
{ 
protected $db; 

public function __construct(PDO $db) 
    { 
    $this->db = $db; 
    } 
public function isInDatabase($checkIfThis, $isHere) 
    { 
    $stmt = $db->prepare("SELECT 1 from users WHERE $isHere = :$isHere"); 
    $stmt->execute(array(':$isHere' => $checkIfThis)); 
     if ($stmt->rowCount() > 0) { 
     echo "It's in the database"; 
     } else { 
     echo "Not in the database and you are good to go!"; 
     } 
    } 
} 
$usermanagement = new UserManagemen($db, null, null, null); 
$usermanagement->isInDatabase(Batman, username); 
在connect.php

:這個曾在我的程序編碼的測試。

$configurator['database'] = array(
'username' => 'root', 
'password' => 'root', 
'host' => 'localhost', 
'db' => 'girlscouts', 
); 
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' 
); 
try { 
$db = new PDO("mysql:host={$configurator['database']['host']};dbname={$configurator['database']['db']};charset=utf8", $configurator['database']['username'], $configurator['database']['password'], $options); 
} 
catch (PDOException $ex) { 
die("Failed to connect to the database: " . $ex->getMessage()); 
} 

我提前道歉,如果這已被要求多次,我已經嘗試了谷歌,但什麼也沒有返回值,可能是因爲我不知道google一下。我在尋求幫助方面並不大,但我會給它一個機會。

+1

你不需要WHERE子句中的'='嗎? – andrewsi

+0

添加到anrewsi說,它看起來像PHP錯誤報告關閉,否則它會告訴你有一個錯誤在您的查詢。然後你可以使用php來找出問題所在,並得出與andrewsi相同的結論。 – Jasper

+0

當然可以!修復它並測試它。還沒有改變最終結果,但它肯定是一個必要的變化,並證明我需要更多的咖啡。 –

回答

0

我覺得應該是

if ($stmt->rowCount() > 0) { // data available 
    echo "It's in the database"; 
} else { 
    echo "Not in the database and you are good to go!"; 
} 

,而不是

if ($stmt->rowCount() > 0) { 
    echo "Not in the database and you are good to go!"; 
} else { 
    echo "It's in the database"; 
} 

而且你沒有初始化PDOnew PDO(...);,在你的構造應該是

$this->db = new PDO(...); 

和你應該使用它像

$stmt=$this->db->prepare(...); 
$stmt->execute(...); 

有關詳細信息,請參閱thisthis

+0

謝謝!修正了它,但它仍然不會返回任何內容。 –

+0

@rococopolkadotbandit,[檢查此答案](http://stackoverflow.com/questions/8179852/cant-initialize-a-pdo-object-in-a-class-as-a-property)。 –

+0

我已經知道它就像在我的介紹文章。我不知道這些字段是否是必需的,所以我只是把它放在那裏。 –

0

你做錯了。

而不是作出額外的請求只是爲了看到,如果這樣的值已經存儲在表中,您應該設置列上的UNIQUE約束。然後,如果您已正確設置了PDO實例,則嘗試插入副本會增加PDOException,然後您可以以任何您想要的方式進行處理。

另外UNIQUE約束會讓你在MySQL中執行.. ON DUPLICATE UPDATE ..構造。

要了解有關PDO使用的更多信息,請閱讀this tutorial。似乎你正在模擬準備好的語句

+0

我正在嘗試使用準備好的語句,用戶名是用戶輸入,試圖保護數據庫而不需要任何白名單,因爲我希望我的用戶能夠使用unicode字符,如š和撇號。我對這一切都非常陌生,所以如果我沒有任何意義,我很早就承認我的無知。 Unicode和特殊字符的使用對頁面的設計至關重要。 –