我正在尝试从最后一个查询中获取自动增量ID,并更新同一行。此外,我想保持在事务中的一切,并抛出用户友好的错误,如果有什么地方出了问题。你能帮帮忙吗?
$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());发布于 2011-12-10 00:05:04
这只是一个建议,但是为什么不尝试使用存储过程呢?
在MySQL中
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中,并使用来利用准备好的语句:
$q = $db->prepare("CALL test (?,?,?,?)");
$q->bindParam(1, $test1);
$q->bindParam(2, $test2);
$q->bindParam(3, $val);
$q->bindParam(4, $testCol);
$q->execute();发布于 2011-12-10 00:05:51
您是否只想将查询放在一个事务中?如果是,只需将您的查询调用放在:
mysql_query('START TRANSACTION');
// your queries
mysql_query('COMMIT');我不确定我完全理解你的问题到底是什么。请参阅http://dev.mysql.com/doc/refman/5.0/fr/commit.html
https://stackoverflow.com/questions/8448067
复制相似问题