2013-12-23 17 views
0
<?php 
    try{ 
     $db=new PDO("mysql:host=localhost;dbname=placement","rot","password"); 
    }catch(Exception $e){ 
     die("An error occured".$e->getMessage()); 
    } 
    $username=$_POST['username']; 
    $password=$_POST['password']; 
    $stmt=$db->prepare("SELECT regno,password FROM placement.authenticate 
       WHERE regno = ? AND password = ? LIMIT 1");   
    $result=$stmt->execute(array($username,$password)); 
    if($result){ 
     $row=$stmt->fetch(PDO::FETCH_ASSOC); 
     echo "{$row['admin']}<br/>"; 
     } 
     else{ 
      die("Error Occured<br/>"); 
     } 
?> 

我使用mysql。

第一個問題

我真的使用上面的代碼來檢查我的數據庫的用戶名和密碼 如果($結果)我undesrtand如果執行$語句就返回true,但反正是有我可以檢查查詢是否有任何結果? 我讀了一個Q/A在這裏在stackoverflow,它說,使用$ stmt-> rowCount()不一定返回所需的結果是否有任何其他簡單的解決方法,這一個評論建議使用if ($ stmt-> fetch()> 0)這種方法是否正確?

第二問題

我使用$行= $ stmt->取(PDO :: FETCH_ASSOC)讀取當前行; 我收到錯誤,說undefined index.at行

echo「{$ row ['admin']}」;

另外當我使用print_r($ row)我只得到2列而不是第3列。

對不起,愚蠢的問題,但任何我剛纔在代碼中使用的PDO statments的這個結果。(我真的學習PHP)

我已經通過這些鏈接了 Link 1 Link 2

回答

3

您實際上並未在查詢中選擇該值。您只選擇regnopassword

$stmt=$db->prepare("SELECT regno,password FROM placement.authenticate 
      WHERE regno = ? AND password = ? LIMIT 1");  

需要成爲:

$stmt=$db->prepare("SELECT regno,password,admin FROM placement.authenticate 
      WHERE regno = ? AND password = ? LIMIT 1");  
+0

謝謝我想我應該多做一點關於問題1的查詢 – AAB

+0

,我應該怎麼做? – AAB

+0

'$ stmt-> rowCount()'應該適合你。如果沒有,你應該發佈一個新的問題,顯示你正在使用的代碼,包括該語句,以及一個很好的例子,說明它何時失敗以及結果如何。這將幫助我們排除故障。 –

2

爲什麼你會期望從查詢得到3列?

SELECT regno,password FROM placement.authenticate etc... 
     ^^^^^^^^^^^^^^ 

你只是提取這兩個指定的列。 $row結果中沒有admin結果,因爲您沒有告訴數據庫取回它。例如你需要

SELECT regno,password,admin etc... 
        ^^^^^^---you need this 
+0

謝謝我想我應該多讀一些關於查詢的內容 – AAB