2013-07-14 68 views
0

我是mysqli的新手,並以面向對象的方式使用PHP,並且在使用預準備語句檢索值時遇到問題。我有具有可變一個PHP類:沒有準備好的語句查詢結果

var $getUsernameStatement; 

在施工過程中我準備語句:

$this->getUsernameStatement = $this->db->prepare("SELECT username FROM users WHERE id = ?;"); 

然後,後來,我檢索值與它:

function getUsername($userID) { 
    $this->getUsernameStatement->bind_param("i", $userID); 
    $this->getUsernameStatement->execute(); 
    $this->getUsernameStatement->bind_result($username); 
    if($this->getUsernameStatement->fetch()) { 
     echo("Retrieved username " . $username); 
    } else { 
     echo("Nope!"); 
    } 
    return $username; 
} 

在至少這是該計劃。我似乎並沒有得到任何值,當我在已知良好的ID通過像這樣:

$user->getUsername(2); // There exists an entry with id 2 in the table 

我敢肯定,我做錯了(沒人責怪,但在規劃一個人的自我),但我似乎無法發現它。任何幫助將不勝感激。

僅供參考,下面是用於創建用戶表的SQL:

$sql = <<<SQL 
    CREATE TABLE IF NOT EXISTS `users` (
    `id` INT NOT NULL AUTO_INCREMENT , 
    `username` VARCHAR(64) NOT NULL , 
    `email` VARCHAR(128) NOT NULL , 
    `password_hash` VARCHAR(128) NOT NULL , 
    PRIMARY KEY (`id`) , 
    UNIQUE INDEX `id_UNIQUE` (`id` ASC) , 
    UNIQUE INDEX `email_UNIQUE` (`email` ASC) , 
    UNIQUE INDEX `username_UNIQUE` (`username` ASC)); 
SQL; 

任何幫助將不勝感激。

回答

1

嗯,對我來說你的代碼似乎在工作......

我的確和你說的一樣。在構建,創建聲明。雖然你從來沒有提到過有關$ db變量的內容,但我還是假設你在使用它之前已經定義並初始化了它在你的類中的數據庫連接?

class TheClass 
{ 
    private $db; 
    private $getUsernameStatement; 

    function __construct() 
    { 
     // Initialise database variable 
     $this->db = mysqli_connect("host", "username", "password", "dbname"); 

     // Prepare the statement 
     $this->getUsernameStatement = $this->db->prepare("SELECT username FROM users WHERE id = ?;"); 
    } 

    // Your function, without changes 
    public function getUsername($userID) { 
     $this->getUsernameStatement->bind_param("i", $userID); 
     $this->getUsernameStatement->execute(); 
     $this->getUsernameStatement->bind_result($username); 
     if($this->getUsernameStatement->fetch()) { 
      echo("Retrieved username " . $username); 
     } else { 
      echo("Nope!"); 
     } 
     return $username; 
    } 
} 

,然後通過實例類,並調用該方法測試:

$c = new TheClass(); 
$username = $c->getUsername(2); 

成功打印檢索用戶名在屏幕上名爲myUsername,和$用戶名等於名爲myUsername(該用戶名ID = 2的表格)。

似乎你的代碼工作?

+0

原來,是的,該代碼特別是正常工作。我所缺少的是語句使用之間的重置,所以在第一次調用時我會檢索該ID並且隨後的調用將失敗。感謝給我一個單獨的,我的代碼的工作塊,以幫助我指導我的搜索:) –

相關問題