2012-04-02 11 views
1

私はmysqlテーブルの更新に問題があります。問題は幾分奇妙に思えますが、私はそれを以下で説明します。mysqliストアドプロシージャと更新文

単一フォームのデータが2つの異なるテーブルに挿入/更新されているユーザーのプロファイル更新に取り組んでいますが、フォーム情報全体を更新するとデータの更新は成功しますが、更新は失敗です。私は別のキーワードで私の質問の多くの時間をGoogleで検索しているが、私は私のように、関連する質問を見つけるいけないけれども、コードは

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `usp_user_profile_save` $$ 
CREATE PROCEDURE `usp_user_profile_save`(IN sIntro_para VARCHAR(255), IN sBook VARCHAR(255), IN sProfileNewName VARCHAR(255), 
IN iRel VARCHAR(255), IN iBdate VARCHAR(255), IN iSO INT, IN iMerital_status INT, IN iChildren INT, IN iProfession INT, 
IN iIncome INT, IN iIncome_unit INT, IN iCountry INT, IN iState INT, IN iCity_or_post_code INT, IN iHeight VARCHAR(255), IN iSp INT, IN iEthnicity INT, 
IN iHair_color INT, IN iHair_lenght INT, IN iEye_color INT, IN iSmoker_or_not INT, IN iUserId INT) 
BEGIN 
DECLARE n,n1,respCode INT; 
DECLARE respMsg,dbg VARCHAR(255); 

    START TRANSACTION; 

    UPDATE `tbl_user` SET 
    `introduction` = sIntro_para, 
    `profile_picture` = sProfileNewName, 
    `birthdate` = iBdate, 
    `s_o` = iSO, 
    `marital_status` = iMerital_status, 
    `children` = iChildren, 
    `profession` = iProfession, 
    `income` = iIncome, 
    `income_unit` = iIncome_unit, 
    `my_book` = sBook, 
    `r_s` = iRel, 
    `counrty` = iCountry, 
    `state` = iState, 
    `city` = iCity_or_post_code, 
    `modified` = NOW(), 
    `modified_by` = iUserId 
    WHERE `id` = iUserId; 
    SET n = ROW_COUNT(); 

    IF n <= 0 THEN 
    ROLLBACK; 
    ELSE 

    IF EXISTS (SELECT * FROM `tbl_user_physical` WHERE `tbl_user_id` = iUserId) THEN 
     UPDATE `tbl_user_physical` SET 
     `tbl_user_id` = iUserId, 
     `height` = iHeight, 
     `shape` = iSp, 
     `ethnicity` = iEthnicity, 
     `hair_color` = iHair_color, 
     `hair_length` = iHair_lenght, 
     `eye_color` = iEye_color, 
     `smoker_or_non_smoker` = iSmoker_or_not 
     WHERE `tbl_user_id` = iUserId; 
     SET n1 = ROW_COUNT(); 

    ELSE 
     INSERT INTO `tbl_user_physical`(`tbl_user_id`, `height`, `shape`, `ethnicity`, `hair_color`, `hair_length`, `eye_color`, `smoker_or_non_smoker`) VALUES (iUserId, iHeight, iSp, iEthnicity, iHair_color, iHair_lenght, iEye_color, iSmoker_or_not); 
     SET n1 = LAST_INSERT_ID(); 
    END IF; 

    IF n1 > 0 THEN 
     COMMIT; 
     SELECT 1 AS respCode, 'Registration successfull.' AS respMsg; 
    ELSE 
     ROLLBACK; 
     SELECT 0 AS respCode,'Registration couldn\'t be completed.' AS respMsg, n, n1; 
    END IF; 
    END IF; 

END $$ 

DELIMITER; 

...下の通りであるSQL更新のためにmysqlのストアドプロシージャを使用しています、私は更新文を書かれています更新する予定の新しいデータの大部分が古いものと同じであり、私のシニアは、新しいデータセットが提出されて使用されている場合にのみ更新が機能すると私に言っていたからです。

so、この問題を解決するのを手伝ってください ありがとうございます。

答えて

0

私は最近、そのことを知りましたUPDATE同じデータを更新するとステートメントが返されません。したがって、新しい列modified_dateが更新され、NOW()でこのフィールドが更新され、少なくとも1つの列が変更され、UPDATEステートメントがエラーを返さないようにしました。

関連する問題