2013-06-02 90 views
1

我會承認php對我來說是一種新的語言。使用fetch_column和fetch(PDO :: FETCH_ASSOC)?

現在我可以單獨使用這些工具。在我的準備查詢SELECT * FROM ...將允許我的PDO獲取assoc while循環工作,但然後獲取列不起作用。然後我使用SELECT COUNT(*)我的抓取列工作,但是然後我的抓取assoc沒有。

因此,圍繞這一點,所以兩者都會工作嗎?因爲我需要獲取列來返回有多少行作爲整數值(1或0)來確定用戶是否輸入了登錄信息。但後來我需要在那裏獲取列以返回在我的數據庫中的表的用戶名部分中輸入的字符串值。以便我可以使用此信息根據用戶的輸入檢查它以驗證用戶和密碼。

謝謝,這是我的代碼。如果你需要它更清楚地解釋我會去。

<?php 
$config['db'] = array(
    'host'  => 'localhost', 
    'username' => 'root', 
    'password' => '', 
    'dbname' => 'inb271assignment' 
); 

$pdo = new PDO('mysql:host=' . $config['db']['host'] . '; dbname=' . $config['db']['dbname'], $config['db']['username'], $config['db']['password']); 

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
try 
{ 
    $pdo->beginTransaction(); 

    $username = $_POST['Username']; 
    $password = $_POST['Password']; 

         //Nicholas will be $dbUsername when fetch is working correctly. 
    $databaseusername = Nicholas; 

    if ($username&&$password) 
    { 
     $result = $pdo->prepare("SELECT COUNT(*) FROM members WHERE Username=?"); 
     $result->execute(array($databaseusername)); 

     $row = $result->fetchColumn(); 

     if ($row!=0) { 

      while ($rows = $result->fetch(PDO::FETCH_ASSOC)) { 

       $dbUsername = $rows['Username']; 


      } 
      echo $dbUsername; 

     } 
     else 
      die("That user doesn't exist"); 

    } 

    $pdo->commit(); 
} 
catch(PDOException $pe) 
{ 
    echo($pe->getMessage()); 
} 
?> 

所以目前我有SELECT COUNT(*)在那裏。所以如果我在頁面上的表單中輸入用戶名和密碼,它將返回爲!= 0,允許while循環工作。如果我有SELECT *,while循環通常會工作。但是因爲我不這樣做,因爲我需要計數它沒有。所以我無法從數據庫檢索我需要的信息。

+1

爲什麼你需要'COUNT(*)'? – agim

+0

如果我不包含它,那麼fetchColumn()不起作用。所以目前我可以得到我需要展示的兩件事中的一件或另一件。只是不是在同一時間。現在嘗試法比奧的方法。 –

回答

3

使用SELECT * FROM ...和PDO爲常取assoc命令,並使用$result->rowCount();返回所有受影響的行,這相當於與SELECT COUNT(*)

0

如果您僅使用count(*)查詢是否存在具有數據庫中給定用戶名的用戶,那麼您並不需要它。你可以取第一行,如果它是空的,那麼沒有用戶,否則至少有一行。所以你隱含了你的信息。

$rowNum = 0; 
foreach ($result->fetchAll(PDO::FETCH_ASSOC) as $row) { 
    $rowNum = $rowNum + 1; 
    $dbUsername = $row['Username']; // btw after the loop you have only the name of the last row 
} 
if ($row>0) { 
    echo $dbUsername; 
} 
0

首先你需要了解的含義各運營商使用的是。
然後只在需要時才使用它,而不是僅僅因爲你看到它們在某處使用而添加任何操作符。

事實上,您既不需要COUNT(*)也不需要rowCount(),也不需要while。應該只返回一行。這就夠了。

交易和try..catch也計數。

你真正需要的是什麼代碼,只需幾行:

if (isset($_POST['Username'])) 
{ 
    $sql = "SELECT * FROM members WHERE Username=? AND Password=?"; 
    $result = $pdo->prepare($sql); 
    $result->execute(array($_POST['Username'],$_POST['Password'])); 
    return $result->fetch(); 
    // or do whatever you want with returned data 
} 

所有

相關問題