2013-10-31 81 views
-1
@$user_id =$_GET['user_id']; 

    $lists = $db->query(
     'SELECT 
      id, 
      ad 
     FROM 
      users_projects_name 
     WHERE 
      user_id = '.$user_id.' 
     ORDER BY 
      id 
     '); 


    $lists->setFetchMode(PDO::FETCH_ASSOC); 

    $num=0; 
    while($f_lists = $lists->fetch()) 
    { 
     $num++; 

     echo' 
     <tr class="tr1"> 
      <td class="td1">'.$num.'</td> 
      <td>'.$f_lists['ad'].'</td> 
      <td><a href="delete_project.php?id='.$f_lists['id'].'&user_id='.$user_id.'">Delete</a></td> 
     </tr>'; 
    } 

    $count = (int) $lists->fetchColumn(); 
    echo $count; 
+2

我不認爲'fetchColumn()'有資格作爲「PDO數」 ... –

+1

只是給我們一段代碼解決不了你的問題。請向我們提供更多信息;錯誤,預期行爲,意外行爲,案例場景。 –

+0

-1使用PDO與舊的mysql ext相同的野蠻方式 –

回答

1

首先,你完全不需要COUNT因爲你已經擁有了它。

其次,您正在以錯誤的方式使用PDO。這裏有一個更好的方法:

$sql = 'SELECT id, ad FROM users_projects_name WHERE user_id = ? ORDER BY id'; 
$stm = $db->prepare($sql); 
$stm->execute([$_GET['user_id']]); 
$lists = $stm->fetchAll(); 
?> 

<table> 
<?php if ($lists): ?> 
<?php foreach($lists as $num => $row): ?> 
<tr class="tr1"> 
    <td class="td1"><?= ++$num?></td> 
    <td><?=$row['ad']?></td> 
    <td><a href="delete_project.php?id=<?=$row['id']?>">Delete</a></td> 
</tr> 
<?php  endforeach ?> 
</table> 
<?php else: ?> 
Nothing found 
<?php endif ?> 
+0

那麼在這種情況下,什麼時候和這種情況有什麼區別? – RiKo

+0

你說我不需要數。但是這個sql可能什麼都不會返回在這種情況下,iw將很好顯示:沒有找到。由於我希望第一次計數,然後獲取結果。我認爲你理解我是對的。 – RiKo

+0

@RiKo我不明白**沒有寫在你的代碼中**。無論如何,你仍然不需要爲這項檢查計數,因爲你有**數據**本身 –

0

您正在提取列,不計數。

要獲取計數,您必須在$lists上使用rowCount()方法。

這是好主意,瞭解可用的方法在這裏http://www.php.net/pdo

+0

而他的結果在他執行'fetchColumn'的時刻實際上結束了,因此沒有任何返回 – baldrs

+0

Yeap,man。對不起,我總是混淆列和數 – RiKo

+2

你不應該使用'rowCount()'來計算行數。對於大多數數據庫,PDOStatement :: rowCount()不會返回受SELECT語句影響的行數。相反,使用PDO :: query()發出一個SELECT COUNT(*)語句,其謂詞與您想要的SELECT語句相同,然後使用PDOStatement :: fetchColumn()來檢索將返回的行數。您的應用程序可以執行正確的操作。 http://www.php.net/manual/en/pdostatement.rowcount.php –