2015-05-26 55 views
0

有人可以幫助我轉換成PDO這如何一些MySQL的轉換爲PDO

// verify email and password pair 
$userid = 0; 
$query = sprintf("SELECT id FROM users WHERE LOWER(email)='%s' AND passwordhash='%s'",strtolower($email),$pwdhash); 
$resource = mysql_query($query); 
if ($resource) 
{ 
    $row = mysql_fetch_row($resource); 
    if (isset($row[0])) 
     $userid = $row[0]; 
} 

這是我的嘗試:

$userid = 0; 
$resource = $dbh->query("SELECT id FROM users WHERE LOWER(email)=':email' AND passwordhash=':hash'"); 
$resource->bindValue(':email',$email,PDO::PARAM_STR); 
$resource->bindValue(':hash',$pwdhash,PDO::PARAM_STR); 
if ($resource->execute()) 
{ 
    $result = array(); 
    while ($row = $resource->fetch()) { 
     array_push($result, $row); 
    } 

    if (isset($result[0])) 
    $userid = $result[0]; 

    $dbh = null; 
    return $result; 
} 

我敢肯定的東西是錯誤與內部的一部分,如果聲明

與其他嘗試:

$userid = 0; 
    $resource = $dbh->query("SELECT id FROM users WHERE LOWER(email)=':email' AND passwordhash=':hash'"); 
    $resource->bindValue(':email',$email,PDO::PARAM_STR); 
    $resource->bindValue(':hash',$pwdhash,PDO::PARAM_STR); 
    if ($resource) 
    { 
     $row = $resource->fetchAll(); 
      if (isset($row[0])) 
      $userid = $row[0]; 
    } 

    // close database and return 
    $dbh = null; 
    return $userid; 
} 

有一些更多的嘗試......

+0

$ dbh-> prepare而不是$ dbh->查詢我想。 – Szenis

+1

用'prepare'替換'query'並刪除':email'和':hash'周圍的單引號 – Daan

回答

0

試試這個,

使用prepare而不是query,的準備,結果是statment句柄,可用於值綁定到您使用了命名參數在準備。

$userid = 0; 
$stmt = $dbh->prepare("SELECT id FROM users WHERE LOWER(email)=:email AND passwordhash=:hash"); 
$stmt->bindValue(':email',$email,PDO::PARAM_STR); 
$stmt->bindValue(':hash',$pwdhash,PDO::PARAM_STR); 
if ($stmt->execute()) 
{ 
    $result = array(); 
    while ($row = $stmt->fetch()) { 
     array_push($result, $row); 
    } 

    if (isset($result[0])) 
    $userid = $result[0]; 

    $dbh = null; 
    return $result; 
} 
+0

是否表示我無法將值綁定到查詢句柄裏面的參數 –

+0

謝謝你回答它的工作 –

+0

不,你不能。 '$ dbh-> query()'直接向數據庫發出查詢,所以沒有必要修改參數。所以它基本上適用於不需要參數的簡單查詢,或者參數可以像「SELECT * FROM table WHERE col1 = 10'那樣硬編碼的地方 – RiggsFolly