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