真正准备时默默地失败,在模仿时起作用

时间:2015-04-26 13:18:29

标签: php mysql pdo prepared-statement

出于安全考虑,我将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和其他平台时,我发现了一些类似于"真正准备好的语句"哪个可以解决(对我不起作用)。我决定打开仿真,它运行得很好。

我的问题:我想保留真实准备好的陈述,我不知道,有什么不对......

编辑: 我只是为了测试目的而从PDO更改为MySQLi,MySQLi工作,PDO没有(并且仍然没有使用siltenty)这里的脚本:

http://pastebin.com/jvjsfFVC

MySQLi总是做真正准备好的声明

1 个答案:

答案 0 :(得分:0)

如果遇到错误,请尝试在代码之间捕获,我们可以看到错误数组而不是空白。

 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();


}