从1个表单插入2个表。 Mysql交易?

时间:2013-04-17 08:30:52

标签: php mysql database

用户将创建文章并使用它提交图像。

+文章将转到文章表。

+图像将转到图像表(以便可以在网站的其他区域使用)。

有人建议我使用TRANSACTIONS但我收到错误。

    $sql ='BEGIN INSERT INTO articles(article_title, article_text, article_date)
            VALUES (?, ?, NOW())
            INSERT INTO images(article_id, image_caption)
            VALUES(LAST_INSERT_ID(),?);
            COMMIT';

 $stmt = $conn->stmt_init();
    if ($stmt->prepare($sql)) {
    $stmt->bind_param('sss', $_POST['article_name'], $_POST['description'], $_POST['image_caption']);

        $OK = $stmt->execute();

        printf("%d Row inserted.\n", $stmt->affected_rows);

        $stmt->free_result();

    } else{
        echo "Failure- article not uploaded";
    }

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

看起来你正在使用PDO(很好!)。使用PDO,您可以通过beginTransaction()commit()

轻松获得交易

您的代码如下:

$pdo->beginTransaction();
// .. fire your 'normal' queries.
// .. and yet some more queries
$pdo->commit();

然后,我将在两个单独的语句中亲自编写单独的INSERT个查询。我认为更具可读性。

示例:

$pdo->beginTransaction();

$first = $pdo->prepare('INSERT INTO table (field, otherField) VALUES(?,?)');
$second = $pdo->prepare('INSERT INTO table (field, otherField) VALUES(?,?)');

$first->execute(array( .. your data (values) .. ));
$second->execute(array( .. your data (values) .. ));

$pdo->commit();

答案 2 :(得分:0)

$sql ='START TRANSACTION;
       INSERT INTO articles (article_id,article_title, article_text, article_date) VALUES (NULL,?, ?, NOW());
       INSERT INTO images (article_id, image_caption) VALUES(LAST_INSERT_ID(),?);
       COMMIT;';