2015-04-26 64 views
0

爲了安全起見,我將ATTR_EMULATE_PREPARES選項設置爲false。 而在開發環境中,ATTR_ERRMODE在ERRMODE_EXCEPTION上。在真正準備時靜默失敗,在模擬時工作

但這代碼:

// $this->bdd is juste a regular PDO instance with some options 
$req = $this->bdd->prepare('INSERT INTO users VALUES(NULL, :login, :passwd, :email, :firstname, :lastname, :role, :token_id, :confirmed, :registration_date, :last_connexion_date)'); 

$req->bindValue(':login', $login, PDO::PARAM_STR); 
$req->bindValue(':passwd', $passwd, PDO::PARAM_STR); 
$req->bindValue(':email', $email, PDO::PARAM_STR); 
$req->bindValue(':firstname', $firstname, PDO::PARAM_STR); 
$req->bindValue(':lastname', $lastname, PDO::PARAM_STR); 
$req->bindValue(':role', $role, PDO::PARAM_INT); 
$req->bindValue(':token_id', $token_id, PDO::PARAM_INT); 
$req->bindValue(':confirmed', $confirmed, PDO::PARAM_BOOL); 
$req->bindValue(':registration_date', $registration_date, PDO::PARAM_STR); 
$req->bindValue(':last_connexion_date', $last_connexion_date, PDO::PARAM_STR); 

return $req->execute() ? true : $req->errorInfo(); 

只是默默地失敗,在一個ERRCODE至00000 在瀏覽計算器和其他平臺上,我發現了一些類似的錯誤與「真正準備好的聲明」,這是可以解決的(不適合我)。我決定開啓仿真,並且它完美運作。

我的問題:我要保持真正準備好的發言,我不知道,什麼是錯的......

編輯: 我剛從PDO更改爲mysqli的用於測試目的,MySQLi的工作,不要PDO 「T(和仍然失敗siltenty)這裏的腳本:

http://pastebin.com/jvjsfFVC

的MySQLi總是做真正準備好的聲明

回答

0

讓你的代碼,這樣的嘗試捕捉如果我們遇到錯誤w^e可以看到錯誤數組而不是空白。

try { 
    $req = $this->bdd->prepare('INSERT INTO users VALUES(NULL, :login, :passwd, :email, :firstname, :lastname, :role, :token_id, :confirmed, :registration_date, :last_connexion_date)'); 

    $req->bindValue(':login', $login, PDO::PARAM_STR); 
    $req->bindValue(':passwd', $passwd, PDO::PARAM_STR); 
    $req->bindValue(':email', $email, PDO::PARAM_STR); 
    $req->bindValue(':firstname', $firstname, PDO::PARAM_STR); 
    $req->bindValue(':lastname', $lastname, PDO::PARAM_STR); 
    $req->bindValue(':role', $role, PDO::PARAM_INT); 
    $req->bindValue(':token_id', $token_id, PDO::PARAM_INT); 
    $req->bindValue(':confirmed', $confirmed, PDO::PARAM_BOOL); 
    $req->bindValue(':registration_date', $registration_date, PDO::PARAM_STR); 
    $req->bindValue(':last_connexion_date', $last_connexion_date, PDO::PARAM_STR); 
$execute = $req->execute(); 
} catch (PDOException $error) { 
print_r($error); 
die(); 


} 
+0

「的display_errors」爲1和「的error_reporting」在32767(E_ALL),因此它應該顯示在出現故障的情況下的東西,但事實並非如此。 可以肯定的是,我做了你所說的,沒有發生過任何其他的事情...... –

+0

你對這個問題有任何的成功嗎?@Petitkoalak – chapskev

+0

不,我一直問每個人我知道這件事,我沒有工作答案...... 我必須強制準備好語句模擬,即使這是潛在的安全漏洞 –

相關問題