2013-03-31 81 views
2

我想創建一個函數,它將查詢數據庫並輸出數組中的所有結果。出於某種原因,它只顯示一個結果。回答所有來自mysql_query的結果

這裏是功能

function reguser_list() { 
$query = mysql_query("SELECT `user_name` FROM `users` WHERE `active` = 1"); 
$reguser_names = mysql_fetch_assoc($query); 
$list_names = implode(', ', $reguser_names); 

echo $reguser_names; 
} 

目前有2個用戶是活躍,但這種只顯示一名字,我怎麼才能得到它顯示了數據庫?

回答

6

您需要迭代mysql_query的結果,例如。

while ($row = mysql_fetch_assoc($result)) 
{ 
    echo $row['user_name']; 
} 

,因爲我知道你想用逗號分隔它來連接的結果,你可以直接做在MySQL購買使用GROUP_CONCAT()

SELECT GROUP_CONCAT(user_name) as UserName FROM users WHERE active = 1 

PHP

$query = mysql_query("SELECT GROUP_CONCAT(user_name) as UserName FROM users WHERE active = 1"); 
$reguser_names = mysql_fetch_assoc($query); 
$list_names = $reguser_names['UserName']; 

GROUP_CONCAT()的默認限制是1024

如果你想改變變量的值的語法是:

SET [GLOBAL | SESSION] group_concat_max_len = val; 
// where val is an unsigned integer 

more on this link..

+0

上謹防相對較低的默認長度限制'GROUP_CONCAT' –

+0

@JW¯¯以及我寧願讓他們顯示在一個無序列表。所以我會用'return'

  • '。內爆('
  • ',$行)。 '
';' – zachstarnes

+0

我明白了,謝謝! – zachstarnes

0

從db中讀取數據時,可以使用while循環。

你不應該在新的代碼why?)使用mysql_*功能,它們是deprecated。使用PDO or MySQLi代替

0

mysql_ *已被棄用

while ($row = mysql_fetch_assoc($result)) { 
      echo $row['user_name']; 
    } 
1

如果你要堅持ext/mysql,您需要使用一個while循環。 PDOStatement有一個非常不錯的fetchAll方法,可以基本上取代你的。

$pdo = new PDO('mysql:host=?', 'user', 'pass'); 
//If `active` is 1 or 0 only, you don't need the `= 1` 
echo implode(', ', $pdo->query("SELECT user_name FROM users WHERE active = 1") 
    ->fetchAll()); 
+0

我有一個connect.php已經連接到數據庫。我可以不使用那個而不是'新的PDO(creds)'嗎? – zachstarnes

+0

@zachstarnes不,你不能這樣做,因爲'PDO'不會創建一個「全局」連接(這實際上不是很好的做法)。然而,你可以用包含證書的另一個類來包裝PDO,並創建該類的類DB {public function __construct(){return new PDO(credentials); }}''$ pdo = new DB;' –

+0

好的。我有多個使用'mysql_query'的函數,所以每次執行查詢時,我都必須執行上面的操作。(只是改變'pdo-> query'),所以如果我更改用於訪問數據庫的用戶名或密碼,我必須在所有這些數據庫上進行更改? – zachstarnes