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