2012-10-03 115 views
0

您好我目前使用PHP 5.3結合MySQL服務器5.1.61。 我目前正在嘗試做一個loginscript,但我遇到了問題 ,我得到沒有結果數據,也沒有錯誤消息。 處理該登錄的功能如下:PHP PDO導致沒有數據從mysql

public function doLogin($username,$pw) 
    { 
     $db=new incdb(); 
     $row['name']=':username'; 
     $row['value']=$username; 
     $row['type']=PDO::PARAM_STR; 
     $parameters[]=$row; 
     $row['name'] = ':password'; 
     $row['value'] = $pw; 
     $row['type'] = PDO::PARAM_STR; 
     $parameters[] = $row; 
     $query=$db->execSql('SELECT * FROM tbUser WHERE ' 
         .'username=:username AND password=MD5(:password)',$parameters); 
     unset($parameters); 
     unset($db); 
     $data=$query->fetch(); 
     if (isset($data) && is_array($data)) 
     { 
      $_SESSION['loggedIn']=$data['id']; 
      $_SESSION['loggedInData']=$data; 
      return 1; 
     } 
     else 
     { 
      echo 'error'; 
      return 0; 
     } 
} 

的incdb類有execSql功能如下:

public function execSql($sql, $parameters) 
{ 
    $query=$this->pdo->prepare($sql); 

    foreach ($parameters as $param) 
    { 
     $query->bindParam($param['name'], $param['value'], $param['type']); 
    } 
    $query->execute(); 

    return $query; 
} 

有人能告訴我,我做錯了什麼嗎? (我相對較新的使用PHP PDO ....在過去,我總是直接使用mysql函數)。 Tnx

+0

你試過用'bindValue'替換'bindParam'嗎? – tftd

回答

0

我認爲你不能綁定一個參數作爲函數的參數。

更改您這樣的代碼:

$row['name'] = ':password'; 
$row['value'] = MD5($pw); 
$row['type'] = PDO::PARAM_STR; 

而且你QUERTY這樣的:

$query=$db->execSql(
    'SELECT * FROM tbUser WHERE ' 
    .'username=:username AND password=:password', $parameters); 

請記住,這取決於字符集的數據庫的用戶名比較可以是區分大小寫的!

+0

將md5移動到$ row ['value']後運行。 雖然我剛剛發現的另一件事......那個由mysql版本和php 5.3生成的md5似乎不同(必須手動將php md5值放入數據庫中,因爲這樣)。 在將md5移動到php部分tnx的總功能中 – Thomas

0

我認爲你傳遞了錯誤的參數,你傳遞一個數組在數組中的位置爲0.你只需要傳遞一個關聯數組。例如。

array('username' => 'mjuarez')