当引擎是InnoDB但是在MyISAM成功时保存数据

时间:2014-01-17 01:16:52

标签: php mysql

我正在使用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;
}

1 个答案:

答案 0 :(得分:1)

您正在开始交易,但从未提交过。由于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;
}