2011-12-09 16 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

これは単なる提案ですが、代わりにストアドプロシージャを使用してみてください。

PHPで
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 ; 

MySQLの

、および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

関連する問題