хранимая процедура и оператор обновления mysqli - PullRequest
1 голос
/ 02 апреля 2012

У меня проблема с обновлением таблицы mysql.Хотя проблема кажется несколько странной, я объясняю ее ниже.

Я работаю над обновлением профиля пользователя, в котором данные из одной формы вставляются / обновляются в две разные таблицы, но если я обновлю всю информацию формы, тообновление данных выполнено успешно, но если я обновлю только 2 или 3 поля, обновление завершится неудачно.Я использую хранимую процедуру MySQL для обновления SQL, код как под ...

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;

Хотя я много раз гуглял свой вопрос с разными ключевыми словами, но я не нахожу соответствующие вопросы, как мои, я написалОператор обновления корректен, но не обновляется, потому что большинство новых данных, которые будут обновлены, такие же, как старые, и мой старший сказал мне, что обновление работает, только если есть новый набор данных, представленный и используемый ..

так что, пожалуйста, помогите мне решить эту проблему заранее спасибо ..

1 Ответ

0 голосов
/ 02 октября 2012

Я недавно узнал, что оператор UPDATE возвращает ошибку, если мы обновляем те же данные. Итак, я обновил добавленный новый столбец modified_date и обновил это поле с помощью NOW(), чтобы изменить хотя бы один столбец, а оператор UPDATE не возвращает ошибку.

...