首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入并更新具有自动增量ID的记录

问插入并更新具有自动增量ID的记录
EN

Stack Overflow用户
提问于 2011-12-09 23:53:55
回答 2查看 236关注 0票数 0

我正在尝试从最后一个查询中获取自动增量ID,并更新同一行。此外,我想保持在事务中的一切,并抛出用户友好的错误,如果有什么地方出了问题。你能帮帮忙吗?

代码语言:javascript
复制
    $parentSQL = "INSERT INTO TABLE1(test1, test2) VALUES ('" .$test1. "', '" .$test2. "')";
$result = mysql_query($parentSQL) or die(mysql_error());

$newId = MySql_Insert_Id();

$val = "MU".$newId;

$updateSQL = "UPDATE TABLE1 SET test3 = '" .$val. "' WHERE id= ".$newId." ";

$updateResult = mysql_query($updateSQL) or die(mysql_error());

$childSQL = "INSERT INTO TABLE2(testId, testCol) VALUES (" .$newId. ", '" .$testCol. "')";

$childResult = mysql_query($childSQL) or die(mysql_error());
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-10 00:05:04

这只是一个建议,但是为什么不尝试使用存储过程呢?

在MySQL中

代码语言:javascript
复制
DELIMITER //
CREATE PROCEDURE test (
    IN param1 VARCHAR(20)
    , IN param2 VARCHAR(20)
    , IN param3 VARCHAR(20)
    , IN param4 VARCHAR(20)
)
BEGIN
    INSERT INTO TABLE1(test1, test2) VALUES (param1, param2);

    UPDATE TABLE1 SET test3 = CONCAT(param3, LAST_INSERT_ID());

    INSERT INTO TABLE2(testId, testCol) VALUES (LAST_INSERT_ID(), param4);
END//
DELIMITER ;

在PHP中,并使用来利用准备好的语句:

代码语言:javascript
复制
$q = $db->prepare("CALL test (?,?,?,?)");
$q->bindParam(1, $test1);
$q->bindParam(2, $test2);
$q->bindParam(3, $val);
$q->bindParam(4, $testCol);
$q->execute();
票数 1
EN

Stack Overflow用户

发布于 2011-12-10 00:05:51

您是否只想将查询放在一个事务中?如果是,只需将您的查询调用放在:

代码语言:javascript
复制
mysql_query('START TRANSACTION');

// your queries

mysql_query('COMMIT');

我不确定我完全理解你的问题到底是什么。请参阅http://dev.mysql.com/doc/refman/5.0/fr/commit.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8448067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档