2015-04-26 1 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. При просмотре StackOverflow и других платформ, я нашел некоторые подобные ошибки, связанные с «действительно подготовленное заявление», которое может быть решена (не работает для меня). Я решил включить эмуляцию, и она отлично работала.

Моей проблема: Я хочу, чтобы действительно подготовленные заявления, и я не знаю, что случилось ...

EDIT: Я просто переход от ПДА в Mysqli для целей тестирования, MySQLi работает, PDO дон «т (и до сих пор терпит неудачу siltenty) здесь сценарии:

http://pastebin.com/jvjsfFVC

Mysqli всегда делает действительно подготовленное заявление

ответ

0

Имейте попробовать поймать между вашим кодом таким образом, если мы сталкиваемся с ошибками ш 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

Нет, я все время прошу всех, кого я знаю об этом, у меня нет рабочего ответа ... Я должен заставить подготовить эмуляцию заявления, даже если это потенциальное нарушение безопасности –

Смежные вопросы