php - 如何将此代码实现到交易中?

标签 php mysql transactions

我目前正在为我的表单使用交易,其中包括一个图像 uploader ,但我不熟悉交易我不确定如何将以下代码添加到我的交易中。

这是我的交易的样子

$conn->query("START TRANSACTION");
$stmt = $conn->prepare('INSERT INTO articles(article_title, article_text, article_date) VALUES (?, ?, NOW())');
$stmt->bind_param('ss', $_POST['article_name'], $_POST['description']);
$stmt->execute();
$stmt = $conn->prepare('INSERT INTO images (article_id, image_caption, image_filename) VALUES(LAST_INSERT_ID(),?,?)');
$stmt->bind_param('ss', $_POST['image_caption'], $_FILES['image_filename']['name']);
$stmt->execute();
$stmt->close();
$conn->query("COMMIT");

我正在尝试添加以下 3 项内容

1.定义上传图片的目标文件夹。

define('UPLOAD_DIR', '../images/');

2.一个str_replace,将文件名中的空格替换为下划线,并赋值给更简单的变量名

$imageFile = str_replace(' ', '_', $_FILES['upload']['name']);

3.并将文件移动到常规图片上传文件夹并重命名

move_uploaded_file($_FILES['upload']['tmp_name'], UPLOAD_DIR.$imageFile);

谢谢你的帮助!

最佳答案

使用异常(exception)。并且不要忘记回滚。

mysqli_report(MYSQLI_REPORT_STRICT); // mysqli will throw exceptions on error

//....

$conn->query("START TRANSACTION");
try
    {
    define('UPLOAD_DIR', '../images/');
    $imageFile = str_replace(' ', '_', $_FILES['upload']['name']);
    if (!move_uploaded_file($_FILES['upload']['tmp_name'], UPLOAD_DIR . $imageFile))
        throw new Exception('Cannot upload file');

    $stmt = $conn->prepare('INSERT INTO articles(article_title, article_text, article_date) VALUES (?, ?, NOW())');
    $stmt->bind_param('ss', $_POST['article_name'], $_POST['description']);
    $stmt->execute();
    $stmt = $conn->prepare('INSERT INTO images (article_id, image_caption, image_filename) VALUES(LAST_INSERT_ID(),?,?)');
    $stmt->bind_param('ss', $_POST['image_caption'], $_FILES['image_filename']['name']);
    $stmt->execute();
    $stmt->close();
    $conn->query("COMMIT");
    echo 'Uploaded';
    } catch (Exception $e)
    {
    $conn->query("ROLLBACK");
    echo 'Error occurred';
    }

关于php - 如何将此代码实现到交易中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16227053/

相关文章:

php - 如何忽略authorize.net支付网关中的AVS不匹配?

php - $_SESSION ['id'] 为空

php - jQuery, PHP : Calling a PHP script from jQuery, 但它似乎没有执行

sql-server - 你如何在 T-SQL 的新事务中写入表

JBoss 消息传递和 XA 事务 : JMS messages are lost

php - POST 不发送所有数据

javascript - 如何在 PHP 中将动态文本附加到 url 中?

python - 基于FK的Django查询——get all,not any

mysql - MySQL命令行中root用户的访问被拒绝

java - JPA 和 Spring 的手动事务服务和 DAO 层