2011-12-09 70 views
0

我想从最后一个查询中获取自动增量ID并更新同一行。此外,我想保留交易中的所有内容,并在出现问题时抛出用户友好的错误。能否请你帮忙?插入并更新自动增量记录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()); 
+1

帮助什么?你有什么问题? –

+0

我只是想确定我是否做得对。还有没有更好的办法做这与交易。对困惑感到抱歉。 – nav100

+0

你正在使用什么样的存储引擎?无论如何,列test3是多余的。 – ajreal

回答

1

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

在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中,并使用PDO利用准备好的发言:

$q = $db->prepare("CALL test (?,?,?,?)"); 
$q->bindParam(1, $test1); 
$q->bindParam(2, $test2); 
$q->bindParam(3, $val); 
$q->bindParam(4, $testCol); 
$q->execute(); 
0

你只想有你的查询在交易?如果是的话,只要把你的查询电话之间:

mysql_query('START TRANSACTION'); 

// your queries 

mysql_query('COMMIT'); 

不知道我完全理解你的问题真的是。 请参阅http://dev.mysql.com/doc/refman/5.0/fr/commit.html

相关问题