2016-04-23 56 views
0

我正在使用SELECT COUNT(*)以驗證用戶是否存在PHP PDO和MySQL。我也想獲得一個特定的列值。每個用戶只有一個值/行或沒有值/行。我可以用SQL統計行數並同時獲得列值嗎?

我試圖做這樣的事情:

$stmt = $link->prepare('SELECT COUNT(*) AND column FROM table WHERE user=:user'); 

什麼我希望得到的回覆是,1,和列值。在那裏我可以將列值綁定到一個變量。

如果不是,我必須首先執行SELECT COUNT(*),然後在驗證用戶和此列是否存在SELECT COUNT(*)查詢後再執行另一個查詢以獲取列名。

+0

爲什麼不選擇該列並查看返回的行數? – Graeme

+0

@Graeme我沒有理由不去,我試圖「優化」,你可能只是幫助我做到這一點,讓我試試。 – janicehoplin

+0

希望如此:)要麼算行數或檢查空值(假定null不是該列有效的值明顯:))'empty'可能是一個很好的測試,以太 – Graeme

回答

-1
SELECT count(*), column FROM table where user=:user 

這是你想要的嗎?

否則,你可以指望在PHP

$pdo = new PDO('mysql:host=XXX.fr.mysql;dbname=YYYY', 'ZZZ', 'TTT', $pdo_options); 

    $response = $pdo->query('SELECT column FROM table'); 
    $count = 0; 
    while ($data = $response->fetch()) 
    { 
     $count++; 
    } 
    $reponse->closeCursor(); 
+0

我不知道,那是「SQL合法」嗎?我會嘗試一下,看看會發生什麼。 – janicehoplin

+0

您也可以使用別名來計數。 SELECT COUNT(*)爲總,從表等列它的作品,我認爲 – Letsrocks

0

你只需要考慮一點點結果的數量。

「count(*)」不是一種「驗證用戶是否存在」的特殊方法。這只是一個查詢,你選擇計數,因爲你只是不知道要選擇什麼。

但只要你有一列來選擇,你不需要任何計數了。

因此,只要選擇你的價值,只要你得到它,你可以告訴用戶存在

$stmt = $link->prepare('SELECT column FROM table WHERE user=:user'); 
$stmt->execute([$user]); 
$col = $stmt->fetchColumn(); 

if ($col) { 
    // user exists 
    $something = $col; // use $col as you wanted 
} 

雖然通過運營商選擇計數()和列沒有組是一個棘手查詢,你應該避免它。

+0

我驗證用戶是否存在或該行存在因爲其中user =:用戶條款 – janicehoplin

+0

你的方法是清潔,我會嘗試一下,謝謝小費。 – janicehoplin

+0

不幸的是我無法得到這個工作。我不知道這行$ stmt-> execute([$ user]);仍然等同於用於預防注射的bindParam。除此之外,我仍然嘗試過,無法回顯連續或「列」 – janicehoplin

相關問題