2016-09-29 158 views
0

所以我想要做的是,我想返回where子句中的列數。目前,這是工作:PHP PDO返回列的假計數

$total = $pdo->query(' 
    SELECT 
     COUNT(*) 
    FROM 
     _TABLENAME_ 
')->fetchColumn(); 

echo $total .' Rows Found'; 
// Outputs 10 if, 10 rows are found. 

但是當我嘗試用WHERE LIKE事業來做它,它不會工作。

$gr = '%'.$_GET['genres'].'%'; 
$total = $pdo->query(' 
    SELECT 
     COUNT(*) 
    FROM 
     _TABLENAME_ 
    WHERE 
     genres 
    LIKE 
     '.$gr.' 
')->fetchColumn(); 

echo $total . ' Rows Found'; 
// Outputs 1, even if more are found 

但很明顯,這是行不通的,如果這不是你如何做一個PDO執行語句,所以我試圖做到這一點:

$gr = '%'.$_GET['genres'].'%'; 
$sql = 'SELECT COUNT(*) FROM `_TABLENAME_` WHERE genres LIKE :gr '; 
$stmt = $pdo->prepare($sql); 
$stmt->bindParam(':gr', $gr, PDO::PARAM_STR); 
$stmt->execute(); 
$total = $stmt->rowCount(); 

echo $total . ' Rows Found'; 

但再一次,結果只有1

+0

你的數據庫數據是什麼樣的? – showdev

+2

SELECT COUNT將只返回一行,包含計數值的單個「列」條目;你需要得到返回的列值,而不是行數 –

+0

@showdev類型喜歡:動作/冒險/喜劇 – Kymetica

回答

1

由於PHP手冊說:

對於大多數數據庫,PDOStatement對象:: rowCount時()不返回 數r的行受SELECT語句影響。

相反

使用PDO ::查詢()發出SELECT COUNT(*)語句具有相同 謂詞如您預期的SELECT語句,然後使用 PDOStatement對象:: fetchColumn()來檢索將返回 的行數。然後您的應用程序可以執行正確的操作。

看看這裏:Counting rows returned by a SELECT statement。 在PHP手冊中,你可以學到更多的使用案例:)

我希望這可以幫助你理解行爲。