Php PDO在执行时返回未知错误消息

Php PDO在执行时返回未知错误消息,php,mysql,pdo,Php,Mysql,Pdo,我正在使用php开发一个网站,我试图实现pdo,但它不断返回 PDO::errorInfo():Array([0] => 00000 [1] => [2] => ) 这是非常重要的,我可以修复这些错误,因为这是一个重要的项目,我已经尝试了一切,我可以。 连接工作正常,因为我 有什么想法吗? 这是连接(如果您需要): 以下是我无法处理的问题: if($mail->send()) { $stmt = $pdo->prepare("INSERT INTO

我正在使用php开发一个网站,我试图实现pdo,但它不断返回

PDO::errorInfo():Array([0] => 00000 [1] => [2] => )
这是非常重要的,我可以修复这些错误,因为这是一个重要的项目,我已经尝试了一切,我可以。 连接工作正常,因为我 有什么想法吗? 这是连接(如果您需要):


以下是我无法处理的问题:

if($mail->send()) { 
    $stmt = $pdo->prepare("INSERT INTO $basecon.$seccon (C_Nome,C_email,C_User,C_Pass,Card_Number,N_fiscal,D_Nasc,C_Morada,N_tel,N_tel_emer,N_cid,N_saude,Tipo_Sangue,C_Hist,Reg_Code) VALUES (:name, :email,:user,:pass,:cardnum,:fisnum,:birth,:adressnum,:telf,:emertelf,:citcard,:healthcard,:bloodstring,:histstring,:value)");
    $stmt->bindParam(array(':name', $_POST['name']), PDO::PARAM_STR);
    $stmt->bindParam(array(':email', $_POST['email']), PDO::PARAM_STR);
    $stmt->bindParam(array(':user', $_POST['username']), PDO::PARAM_STR);
    $stmt->bindParam(array(':pass', md5($_POST['password'])), PDO::PARAM_STR);
    $stmt->bindParam(array(':cardnum', $_POST['cardnumber']), PDO::PARAM_STR);
    $stmt->bindParam(array(':fisnum', $_POST['fiscalnum']), PDO::PARAM_STR);
    $stmt->bindParam(array(':birth', $_POST['birthdate']), PDO::PARAM_STR);
    $stmt->bindParam(array(':adressnum', $_POST['address']), PDO::PARAM_STR);
    $stmt->bindParam(array(':telf', $_POST['telnum']), PDO::PARAM_STR);
    $stmt->bindParam(array(':emertelf', $_POST['emertelnum']), PDO::PARAM_STR);
    $stmt->bindParam(array(':citcard', $_POST['citnumber']));
    $stmt->bindParam(array(':healthcard', $_POST['healthnumber']), PDO::PARAM_STR);
    $stmt->bindParam(array(':bloodstring', $_POST['bloodtype']), PDO::PARAM_STR);
    $stmt->bindParam(array(':histstring','Conta criada a'), PDO::PARAM_STR);
    $stmt->bindParam(array(':value', $regcode), PDO::PARAM_STR);
    if($stmt->execute()) {
        $successmsg = "Your registration was successful! <a href='login.php'>Clique aqui para efetuar login</a><br>";
    } else {
        $errormsg = "We couldn´t send you the confirmation E-mail, please check if you provided us with the correct E-mail, if so, please try again later.";
    }       
} else {
    echo "\nPDO::errorInfo():\n";
    print_r($pdo->errorInfo());
    $errormsg = '<div class="alert alert-danger" role="alert">Something went wrong, please try again later." </div>'  ;
}
if($mail->send()){
$stmt=$pdo->prepare(“插入$basecon.$seccon(C_Nome,C_email,C_User,C_Pass,卡号,N_fiscal,D_Nasc,C_Morada,N_tel,N_tel emer,N_cid,N_saude,Tipo Sangue,C_Hist,regu Code)值(:name,:email,:User,:Pass,:cardnum,:fisnum,:birth,:adresnum,:telf,:emertef,:emertelf,:cittrink,:histring,:healthcard,:healthcard,),:字符串,),,,,,,,,,,,”;
$stmt->bindParam(数组(':name',$\u POST['name']),PDO::PARAM_STR);
$stmt->bindParam(数组(':email',$\u POST['email']),PDO::PARAM_STR);
$stmt->bindParam(数组(':user',$\u POST['username']),PDO::PARAM_STR);
$stmt->bindParam(数组(':pass',md5($\u POST['password']),PDO::PARAM_STR);
$stmt->bindParam(数组(':cardnum',$\u POST['cardnumer']),PDO::PARAM_STR);
$stmt->bindParam(数组(':fisnum',$\u POST['fiscalnum']),PDO::PARAM_STR);
$stmt->bindParam(数组(':birth',$\u POST['birthdate']),PDO::PARAM_STR);
$stmt->bindParam(数组(':addressnum',$\u POST['address']),PDO::PARAM_STR);
$stmt->bindParam(数组(':telf',$\u POST['telnum']),PDO::PARAM_STR);
$stmt->bindParam(数组(':emertelf',$\u POST['emertelnum']),PDO::PARAM_STR);
$stmt->bindParam(数组(':citcard',$\u POST['citnumber']);
$stmt->bindParam(数组(':healthcard',$\u POST['healthnumber']),PDO::PARAM_STR);
$stmt->bindParam(数组(':bloodstring',$\u POST['bloodtype']),PDO::PARAM_STR);
$stmt->bindParam(数组(':histstring','Conta criada a'),PDO::PARAM_STR);
$stmt->bindParam(数组(':value',$regcode),PDO::PARAM_STR);
如果($stmt->execute()){
$successsg=“您的注册成功!
”; }否则{ $errormsg=“我们无法向您发送确认电子邮件,请检查您是否向我们提供了正确的电子邮件,如果是,请稍后再试。”; } }否则{ echo“\nPDO::errorInfo():\n”; 打印($pdo->errorInfo()); $errormsg='出现问题,请稍后再试。“; }
电子邮件的工作原理与问题无关。
谢谢:)

您的错误条件顺序错误。错误发生在发送邮件时,但您显示的数据库错误正如预期的那样为空。正确且一致的缩进将有助于发现此类问题

还值得注意的是,您不需要将参数与PDO绑定,您可以使用
占位符

最后一次编辑,在数据库初始化期间启用异常,但不要在以后的代码中使用。如果数据库查询中出现问题,它不会返回false,而是会引发异常

if($mail->send()) { 
    try {
        $stmt = $pdo->prepare("INSERT INTO $basecon.$seccon (C_Nome,C_email,C_User,C_Pass,Card_Number,N_fiscal,D_Nasc,C_Morada,N_tel,N_tel_emer,N_cid,N_saude,Tipo_Sangue,C_Hist,Reg_Code) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
        $stmt->execute([
            $_POST['name'],
            $_POST['email'],
            $_POST['username'],
            password_hash($_POST['password']),
            $_POST['cardnumber'],
            $_POST['fiscalnum'],
            $_POST['birthdate'],
            $_POST['address'],
            $_POST['telnum'],
            $_POST['emertelnum'],
            $_POST['citnumber'],
            $_POST['healthnumber'],
            $_POST['bloodtype'],
            'Conta criada a',
            $regcode,
        ]) {
        $successmsg = "Your registration was successful! <a href='login.php'>Clique aqui para efetuar login</a><br>";
    } catch (\Exception $e) {
        // of course you should never catch errors just to display them, this is just a demo
        echo $e->getMessage();
        print_r($pdo->errorInfo());
        $errormsg = '<div class="alert alert-danger" role="alert">Something went wrong, please try again later." </div>';
    }
} else {
    $errormsg = "We couldn´t send you the confirmation E-mail, please check if you provided us with the correct E-mail, if so, please try again later.";
}
if($mail->send()){
试一试{
$stmt=$pdo->prepare(“插入$basecon.$seccon(C_名称、C_电子邮件、C_用户、C_通行证、卡号、N_财政、D_Nasc、C_莫拉达、N_电话、N_电话、N_紧急、N_cid、N_saude、Tipo Sangue、C_历史、注册码)值(?,,,,,,,,,,,,,,,,,,,,,,,,,,,))”;
$stmt->execute([
$\u POST['name'],
$\u POST[“电子邮件”],
$\u POST['username'],
密码\u散列($\u POST['password']),
$\邮政['cardnumber'],
$\u POST['fiscalnum'],
$\u邮政[“生日”],
$\u POST[“地址”],
$\u POST['telnum'],
$\u POST['emeternum'],
$\u POST['citnumber'],
$\u POST['healthnumber'],
$\u POST['bloodtype'],
“Conta criada a”,
$regcode,
]) {
$successsg=“您的注册成功!
”; }捕获(\异常$e){ //当然,您永远不应该仅仅为了显示错误而捕获错误,这只是一个演示 echo$e->getMessage(); 打印($pdo->errorInfo()); $errormsg='出现问题,请稍后再试。“; } }否则{ $errormsg=“我们无法向您发送确认电子邮件,请检查您是否向我们提供了正确的电子邮件,如果是,请稍后再试。”; }
您真的不应该使用PHP来处理密码安全问题。在散列之前,请确保您或使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。然后立即使用适当的函数…如果您没有时间第一次正确执行,您将在何时完成什么时候再添加它?为什么要查找
PDO::errorInfo()
如果您的邮件发送失败?它甚至不会在那一点上连接。@Ezekiel这从来都不是问题。典型的用例是当数组项位于单独的行上时。这可以防止在添加新项时出现错误,并且可以忘记逗号,并减少版本控制系统中的行更改数量。您在参数expl方面胜过了我aination。放弃我的答案。我尝试了你的修复,这就是我得到的::PDOStatement::execute()最多需要1个参数,15 givenI但是重新编写了发送电子邮件代码,而您正在编写我确实遇到了问题,当我更改为pdo时,我交换了代码,电子邮件已经存在,所以我弄错了。我仍然无法使用我的代码或您的修复程序在数据库中存储任何内容,抱歉,但感谢您的实际帮助,以及我的意思是:)@MiguelRodrigues我的代码中只有一个参数,而不是15个。我建议复制并粘贴整个内容,因为你似乎在某个地方出错了。
if($mail->send()) { 
    try {
        $stmt = $pdo->prepare("INSERT INTO $basecon.$seccon (C_Nome,C_email,C_User,C_Pass,Card_Number,N_fiscal,D_Nasc,C_Morada,N_tel,N_tel_emer,N_cid,N_saude,Tipo_Sangue,C_Hist,Reg_Code) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
        $stmt->execute([
            $_POST['name'],
            $_POST['email'],
            $_POST['username'],
            password_hash($_POST['password']),
            $_POST['cardnumber'],
            $_POST['fiscalnum'],
            $_POST['birthdate'],
            $_POST['address'],
            $_POST['telnum'],
            $_POST['emertelnum'],
            $_POST['citnumber'],
            $_POST['healthnumber'],
            $_POST['bloodtype'],
            'Conta criada a',
            $regcode,
        ]) {
        $successmsg = "Your registration was successful! <a href='login.php'>Clique aqui para efetuar login</a><br>";
    } catch (\Exception $e) {
        // of course you should never catch errors just to display them, this is just a demo
        echo $e->getMessage();
        print_r($pdo->errorInfo());
        $errormsg = '<div class="alert alert-danger" role="alert">Something went wrong, please try again later." </div>';
    }
} else {
    $errormsg = "We couldn´t send you the confirmation E-mail, please check if you provided us with the correct E-mail, if so, please try again later.";
}