当我运行这段代码时
<?php
include '../bin/config.php';
connect();
if (isset($_GET['id']) && is_numeric($_GET['id'])){
$id = $_GET['id'];
$stmt = $conn->prepare("DELETE FROM noteline WHERE Nid = ?");
$stmt->bindParam(1, $id, PDO::PARAM_INT);
$outcome = $stmt->execute();
if ($outcome){
echo 'it was successfully deleted';
header("Location: ../noteline");
}else {
echo 'it was not successful due to something';
}
}
?>
它回应“它已成功删除”但没有从我的数据库中删除... 但当我通过修改此代码开始一个事务时,这样:
<?php
include '../bin/config.php';
connect();
if (isset($_GET['id']) && is_numeric($_GET['id'])){
$id = $_GET['id'];
$stmt = $conn->prepare("DELETE FROM noteline WHERE Nid = ?");
$stmt->bindParam(1, $id, PDO::PARAM_INT);
$conn->beginTransaction();
$outcome = $stmt->execute();
if ($outcome){
$conn->commit();
echo 'it was successfully deleted';
header("Location: ../noteline");
}else {
echo 'it was not successful due to something';
}
}
?>
我的数据最终从我的MySQL数据库中删除了! 我想知道为什么?
答案 0 :(得分:2)
因为PDO连接在禁用自动提交模式的情况下运行。查看connect()
函数以确保不禁用此模式。
(另外,我看到你正在使用全局变量来存储连接对象。尽可能避免使用全局变量。)
答案 1 :(得分:0)
听起来您的服务器可能已关闭自动提交功能?
http://dev.mysql.com/doc/refman/5.0/en/commit.html
默认情况下,MySQL在启用自动提交模式的情况下运行。这意味着 一旦执行更新(修改)表的语句, MySQL将更新存储在磁盘上以使其永久化。
您的代码中可能有一行发送
SET autocommit=0;
到您的服务器。