Php PDO MysQL“;更新;语句未保存到数据库

Php PDO MysQL“;更新;语句未保存到数据库,php,mysql,pdo,Php,Mysql,Pdo,我对编程很陌生,所以请原谅愚蠢的错误。。我有一个拒绝工作的PDF MySQL语句。我可以通过Ajax/POST成功地传递数据,但它不适用于数据库 我根据以下指导准备了一个“数据库”类,并将其扩展为“电子邮件”类,包括以下功能: public函数updateEmailTemplate($emailTemplateDescription, $emailTemplateSubject,$emailTemplateBody, $emailTemplateType,$id) { $this->query(

我对编程很陌生,所以请原谅愚蠢的错误。。我有一个拒绝工作的PDF MySQL语句。我可以通过Ajax/POST成功地传递数据,但它不适用于数据库

  • 我根据以下指导准备了一个“数据库”类,并将其扩展为“电子邮件”类,包括以下功能:

    public函数updateEmailTemplate($emailTemplateDescription,
    $emailTemplateSubject,$emailTemplateBody,
    $emailTemplateType,$id)
    {
    $this->query('更新电子邮件\u模板
    设置emailTemplateTitle=:标题,
    emailTemplateSubject=:主题,
    emailTemplateBody=:正文,
    emailTemplateType=:类型
    其中emailTemplateID=:id');
    $this->bind(':title',$emailTemplateDescription);
    $this->bind(':subject',$emailTemplateSubject);
    $this->bind(':body',$emailTemplateBody);
    $this->bind(':type',$emailTemplateType);
    $this->bind(':id',$id);
    $this->execute();
    如果($this->lastInsertId()==true){
    echo“模板添加成功”;
    }否则{
    echo“有一个错误”;
    }
    }
    
  • 我可以通过在函数运行时“回显”数据来验证它是否收到可变参数
  • 当它运行时,虽然我只是得到“有一个错误”,但数据库中没有任何更新。。。有什么想法吗

  • 根据要求,我还添加了基于数据库的类代码
  • 类数据库{
    private$host=“localhost”;
    private$user=“root”;
    私人$pass=”MyP@ymentPortal";
    私有$dbname=“mppcompany”;
    私人单位$胸径;
    私有$错误;
    私人$stmt;
    公共函数构造(){
    //设置DSN
    $dsn='mysql:host='.$this->host'.;dbname='.$this->dbname;
    //设置选项
    $options=array(
    PDO::ATTR_PERSISTENT=>true,
    PDO::ATTR_ERRMODE=>PDO::ERRMODE_异常
    );
    //创建一个新的PDO实例
    试一试{
    $this->dbh=新PDO($dsn,$this->user,$this->pass,$options);
    }
    //抓住任何错误
    捕获(PDO$e){
    $this->error=$e->getMessage();
    回显“错误:”。$e->getMessage();
    }
    }
    公共函数查询($query){
    $this->stmt=$this->dbh->prepare($query);
    }
    公共函数绑定($param,$value,$type=null){
    if(为null($type)){
    开关(真){
    案例为_int($value):
    $type=PDO::PARAM_INT;
    打破
    案例为_bool($value):
    $type=PDO::PARAM_BOOL;
    打破
    大小写为空($value):
    $type=PDO::PARAM_NULL;
    打破
    违约:
    $type=PDO::PARAM_STR;
    }
    }
    $this->stmt->bindValue($param,$value,$type);
    }
    公共函数execute(){
    返回$this->stmt->execute();
    }
    公共函数结果集(){
    $this->execute();
    返回$this->stmt->fetchAll(PDO::FETCH_ASSOC);
    }
    公共职能单一(){
    $this->execute();
    返回$this->stmt->fetch(PDO::fetch_ASSOC);
    }
    公共函数行计数(){
    返回$this->stmt->rowCount();
    }
    公共函数lastInsertId(){
    返回$this->dbh->lastInsertId();
    }
    公共功能开始事务(){
    返回$this->dbh->beginTransaction();
    }
    公共函数endTransaction(){
    返回$this->dbh->commit();
    }
    公共函数取消事务(){
    返回$this->dbh->rollBack();
    }
    公共函数debugDumpParams(){
    返回$this->stmt->debugDumpParams();
    }
    
    }
    罪魁祸首是
    lastInsertId()
    ——顾名思义,它返回自上一次插入的自动增量,但您不执行任何插入操作


    因此,您需要使用不同的方法检查是否成功,也许只使用异常就足够了。

    为什么您认为输出行必须是另一行?您正在执行
    更新
    查询,这不会影响
    lastInsertId()
    。您是否按照该教程中的建议为
    PDO::ERRMODE_EXCEPTION
    配置了PDO?如果发生任何错误,它应该抛出异常。您无法检查
    lastInsertId()
    以获得
    更新
    并获得有意义的结果。我建议不要使用此PDO包装类,主要是因为它使用薄包装重命名方法,如
    bindParam()->bind()
    并创建一个
    query()
    方法,该方法显然执行
    prepare()
    ,而PDO已经有了一个用于原始查询的
    query()
    方法。PDO已经有了一个非常易于使用的API,所以这似乎有些过头了,而且更加复杂。感谢您的评论,我会在我们进一步前进的过程中考虑到这一点。是的,我在基类中配置了“PDF::ERRMODE_EXCEPTION”。感谢我删除了成功查询,但该方法似乎仍然没有应用任何DB数据。。。它也没有提出任何进一步的建议,无论是关于什么可能导致这种情况。。。另外,Eugen,你有没有关于在这种情况下使用最佳成功方法的建议?