2013-05-30 76 views
15

我想用PHP構建一個web應用程序,我正在使用memcached來存儲來自數據庫的用戶數據。如何讀取提取(PDO :: FETCH_ASSOC);

例如可以說,我有這樣的代碼:

$sql = "SELECT * FROM users WHERE user_id = :user_id"; 
$stmt = $this->_db->prepare($sql); 
$result = $stmt->execute(array(":user_id" => $user_id)); 
$user = $stmt->fetch(PDO::FETCH_ASSOC); 

我真的不知道如何讀$user變量和獲取數據出來。我需要能夠閱讀電子郵件和密碼列。

我希望有人能向我解釋這是如何工作的。

謝謝

+8

使用'的print_r($用戶);'來查看內容返回 – Martin

+1

它返回一個數組,這是否意味着我剛纔讀它$用戶[‘密碼’]? – PHPDEV

+1

@PHPDEV:是的。確切地說:) –

回答

30

PDOStatement::fetch從結果集中返回一行。參數PDO::FETCH_ASSOC指示PDO將結果作爲關聯數組返回。

數組鍵將與您的列名匹配。如果你的表中包含列「電子郵件」和「密碼」,該陣列的結構將類似於:

Array 
(
    [email] => '[email protected]' 
    [password] => 'yourpassword' 
) 

從「電子郵件」列中讀取數據,這樣做:

$user['email']; 

和「密碼「:

$user['password']; 
+1

如何從返回的數據中獲取行計數? – PHPDEV

+1

[PDOStatement :: rowcount](http://www.php.net/manual/pdostatement.rowcount.php) –

+0

@PHPDEV你實際上不需要行計數 –

1

要讀取結果,你可以閱讀它像一個簡單的PHP數組。

例如,獲取name可以像$user['name']那樣完成,依此類推。方法fetch(PDO::FETCH_ASSOC)將只返回1個元組tho。如果你想獲得所有的元組,你可以使用fetchall(PDO::FETCH_ASSOC)。您可以通過多維數組並獲取相同的值。

+0

它不是「像一個數組」,它*是一個數組。附: 'tuple'不是PHP術語:) –

1

PDO:FETCH_ASSOC結果放置在值被映射到它們的字段名稱的數組。

您可以像這樣訪問name字段:$user['name']

我推薦使用PDO::FETCH_OBJ。它獲取字段中的對象,並且可以訪問這樣的:通過陣列像任何其他關聯數組$user->name

9

循環:

while($data = $datas->fetch(PDO::FETCH_ASSOC)){ 
    print $data['title'].'<br>'; 
} 

$resultset = $datas->fetchALL(PDO::FETCH_ASSOC); 

echo '<pre>'.$resultset.'</pre>'; 
1

方法

$user = $stmt->fetch(PDO::FETCH_ASSOC); 

返回字典。你可以簡單地獲取電子郵件地址和密碼:

$email = $user['email']; 
$password = $user['password']; 

其他方法

$users = $stmt->fetchall(PDO::FETCH_ASSOC); 

返回字典的列表

+0

這比4年前接受的這個問題的答案好嗎? – iehrlich

+0

代替單詞「數組」,最好使用單詞「list」和「dictionary」。 – Kit

+0

「關聯數組」是「詞典」的適當詞彙:) – iehrlich

0

/*設計模式 「表數據網關」 */

class Gateway 
{ 
    protected $connection = null; 

    public function __construct() 
    { 
     $this->connection = new PDO("mysql:host=localhost; dbname=db_users", 'root', ''); 
    } 

    public function loadAll() 
    { 
     $sql = 'SELECT * FROM users'; 
     $rows = $this->connection->query($sql); 

     return $rows; 
    } 

    public function loadById($id) 
    { 
     $sql = 'SELECT * FROM users WHERE user_id = ' . (int) $id; 
     $result = $this->connection->query($sql); 

     return $result->fetch(PDO::FETCH_ASSOC); 
     // http://php.net/manual/en/pdostatement.fetch.php //     
    } 
} 

/*打印所有的行與列中的 'USER_ID' 僅*/

$gateway = new Gateway(); 
$users = $gateway->loadAll(); 

$no = 1; 
foreach ($users as $key => $value) { 
    echo $no . '. ' . $key . ' => ' . $value['user_id'] . '<br />'; 
    $no++; 
} 

/*打印USER_ID = 1與所有列*/

$user = $gateway->loadById(1); 

$no = 1; 
foreach ($user as $key => $value) { 
    echo $no . '. ' . $key . ' => ' . $value . '<br />'; 
    $no++; 
} 

/*打印USER_ID = 1與柱的電子郵件和密碼」 */

$user = $gateway->loadById(1); 

echo $user['email']; 
echo $user['password'];