2013-12-10 102 views
2

我想改變我的腳本日誌從mysqlPDO。 對於我的腳本的其餘部分,所有接縫都要從這些部分分開,我簡直不知道爲什麼。PDO不綁定佔位符

我有下面的代碼

... 
$pasword=md5($_POST['password']); 
$email=$_POST['email']; 

.... 

$query ="SELECT id FROM guests WHERE email=':eml' AND password =':pwd' AND lead_guest=17"; 
// $param2=array(':eml'=>$email,':pwd'=>$pasword); 
$state=$dbh->prepare($query); 
$state->bindParam(':eml',$email); 
$state->bindParam(':pwd',$pasword); 
$state->execute(); 

在它的當前狀態,它會返回0行數(它不應該),我也試着

//$state->bindParam(':eml',$email); 
    //$state->bindParam(':pwd',$pasword); 
    $state->execute($param2); 

也返回行計數爲0.

變量$email$pasword是正確的當我echo他們出來,並且該腳本完美使用mysql_函數。

$dbh變量是在標題中創建的,並且$query ="select id where 1"按預期工作。

我確信(雖然可能是錯誤的),我將問題縮小到腳本的state->bindParam()部分。我完全失去了爲什麼這部分腳本沒有得到任何建議的熱烈歡迎。

+1

只用MD5散列密碼是不夠的;使用[強密碼散列算法](http://php.net/password)。 –

+0

嘿,至少用PHP準備語句的問題開始出現在stackoverflow上,或者它只是我的印象。 – Mihai

+0

@Mihai即使每個小時我都會看到SQL注入漏洞。 –

回答

9

刪除單引號'

SELECT id FROM guests WHERE email=:eml AND password =:pwd 
+1

非常感謝 –

2

你的查詢將被

$query ="SELECT id FROM guests WHERE email=:eml AND password =:pwd AND lead_guest=17"; 

周圍:eml:pwd沒有單引號。