2012-07-23 112 views
0

我已經看過堆棧上的其他類似問題,甚至使用了一個示例,我將在後面發佈它說應該返回一個整數,但我仍然得到一個數組...我的SELECT COUNT查詢返回一個不是整數的數組

所以..我怎麼得到一個數組,我如何得到一個整數呢?

function user_exists($username){ 
    $result = mysql_query("SELECT COUNT(username) FROM logins"); 

    // Verify it worked 
    if (!$result) echo mysql_error(); 

    $row = mysql_fetch_row($result); 

    // Should show you an integer result. 
    print_r($row); 


    } 

此輸出:「Array([0] => 1)」。評論說它應該是一個整數。 任何幫助非常感謝!

上面的代碼是僅用於測試目的,蔭實際上是想測試一個SELECT COUNT的值,並在函數返回它真(或假)布爾:

function user_exists($username){ 
    $query = mysql_query("SELECT COUNT (username) FROM `logins` WHERE `username`='$username'"); 
    return (mysql_result($query, 0)==1) ? true: false; 
    } 

但是$查詢VAR是一個不是單個值的數組

+2

另外,你真的應該被遷移到PDO的對象。訪問MySQL時使用更安全。 – Fluffeh 2012-07-23 00:34:04

+1

@Fluffeh優秀點(我正準備發表評論)。 @gavin - 查看[紅盒子](http://uk.php.net/manual/en/function.mysql-connect.php))? 'mysql_ *'函數被棄用。你絕對沒有理由將它們用於新代碼。改用預備的語句和[PDO](http://php.net/pdo)或[MySQLi](http://php.net/mysqli)。 – 2012-07-23 00:37:57

+0

@Fluffeh,Ricardo Altamirano:它變得很煩人,真的很 – zerkms 2012-07-23 00:38:33

回答

8

它返回一列有一行,使用$row[0]從第一列中獲取值。

正如函數名所暗示的那樣,mysql_fetch_row預計會返回一行,其形式爲一個數組,其中包含結果集中每列的元素。

PHP docs

返回值

如果沒有更多的行,則返回字符串數值陣列對應於所提取的行,或FALSE。

mysql_fetch_row()從與指定結果標識符關聯的結果中提取一行數據。該行作爲數組返回。每個結果列存儲在數組中的偏移,起始於偏移0

作爲評論裏卡多和Fluffeh,該接口被廢棄,則應該使用PDO。在PDO之前,PHP缺乏統一的數據庫接口,並且在項目中切換數據庫確實很困難。使用PDO可以很容易地支持多個數據庫,並且prepared statements可以讓您的代碼更加安全,防範SQL注入攻擊。

[更新]

謝謝,也許MYSQL_ROW是不是最好的方法,我只用它用於測試目的。我實際上試圖將結果插入到mysql_result中,但是它是一個數組,所以我相信SELECT COUNT最初會返回一個數組,當我認爲它是爲了返回一個整數時。真的我想$結果= mysql_query(「選擇計數」)是一個單一的值..嗯..?

如果你真的想獲取值作爲一個整數,你可以使用它代替:

// $row = mysql_fetch_row($result); 
$row = mysql_result($result, 0, 0); // first row, first column 
+0

謝謝,也許mysql_row不是最好的方法,我只用它來做測試。我實際上試圖將結果插入到mysql_result中,但是它是一個數組,所以我相信SELECT COUNT最初會返回一個數組,當我認爲它是爲了返回一個整數時。真的我想$結果= mysql_query(「選擇計數」)是一個單一的值..嗯..? – gavin 2012-07-23 00:50:06

+0

您可以改用'mysql_result($ result,0,0)'。 – 2012-07-23 00:52:13

+0

謝謝,我會試試這個。但有一個問題 - SELECT COUNT不是意味着要返回一個單一的值嗎?我讀到的每一處,它都是這樣說的,但在我的例子中似乎不是。 – gavin 2012-07-23 01:10:10

相關問題