Php 引擎为InnoDB时无法保存数据,但在MyISAM时成功保存数据

Php 引擎为InnoDB时无法保存数据,但在MyISAM时成功保存数据,php,mysql,Php,Mysql,我正在用MySQL后端开发PHP应用程序,不幸的是,我无法从PHP脚本在MySQL中保存数据。没有错误,但当我试图直接使用phpmyadmin插入数据时,数据被保存了。当我检查数据库引擎时,它说InnoDB…我脑子里的某种东西告诉我把它改成MyISAM,当我这么做的时候…它工作了。我试着用谷歌搜索发生了什么,但没有成功。谁能解释一下发生了什么事。我在这件事上使用PDO require("path/to/connection.php"); //sample userid $userid = 10;

我正在用MySQL后端开发PHP应用程序,不幸的是,我无法从PHP脚本在MySQL中保存数据。没有错误,但当我试图直接使用phpmyadmin插入数据时,数据被保存了。当我检查数据库引擎时,它说InnoDB…我脑子里的某种东西告诉我把它改成MyISAM,当我这么做的时候…它工作了。我试着用谷歌搜索发生了什么,但没有成功。谁能解释一下发生了什么事。我在这件事上使用PDO

require("path/to/connection.php");
//sample userid
$userid = 10;

try{
   $conn->beginTransaction();
   $query = $conn->prepare("INSERT INTO mytable(userid) VALUES(:userid)");
   $query->bindParam(":userid",$userid,PDO::PARAM_INT);
   $query->execute();
}catch(PDOException $e){
   $conn->rollBack();
   echo $e;
}

您正在启动事务,但从未提交它。因为MyISAM不支持事务,所以不提交并不重要,但是InnoDB在您提交之前不会将数据写回

您需要这样做:

try{
   $conn->beginTransaction();
   $query = $conn->prepare("INSERT INTO mytable(userid) VALUES(:userid)");
   $query->bindParam(":userid",$userid,PDO::PARAM_INT);
   $query->execute();
   $conn->commit();

}catch(PDOException $e){
   $conn->rollBack();
   echo $e;
}
对于单个
INSERT
语句,使用事务是没有意义的,因此您可以这样做:

try{
   $query = $conn->prepare("INSERT INTO mytable(userid) VALUES(:userid)");
   $query->bindParam(":userid",$userid,PDO::PARAM_INT);
   $query->execute();
}catch(PDOException $e){
   $conn->rollBack();
   echo $e;
}

你有密码吗?你的桌子是什么样子的?你知道InnoDB和MyIsam之间有什么区别吗?你必须对事务进行修改。MyISAM不支持事务,但InnoDB支持事务。当您只有一个查询时,实际上没有理由启动事务。