0

1つのエントリパラメータでエラーが発生しましたが、理由がわかりません。

0   14:31:47    call UpdateComment(66,1,2,"NOWYTitle","NOWYContent")    Error Code: 1054. Unknown column 'NOWYTitle' in 'field list'

呼び出し手順:

call UpdateComment(66,1,2,"NOWYTitle","NOWYContent");

私の手順:

DELIMITER $$
DROP PROCEDURE IF EXISTS UpdateComment $$
CREATE PROCEDURE `UpdateComment`(UserId INT,/*Crc32 int(11) unsigned,*/ArticleId int(11),CommentsId int(11), newTitle varchar(255), newContent varchar(255))
BEGIN

        DECLARE helpUserTable varchar(255);

        set helpUserTable = CONCAT("User",UserId);

        set @score1 =CONCAT("UPDATE `",helpUserTable,"` SET Title = ",newTitle," WHERE CommentsId = ",CommentsId," AND ArticleId = ",ArticleId);
        PREPARE stmt FROM @score1;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
        set @score2 =CONCAT("UPDATE `",helpUserTable,"` SET Content = ",newContent," WHERE CommentsId = ",CommentsId," AND ArticleId = ",ArticleId);
        PREPARE stmt FROM @score2;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;

END
4

2 に答える 2

1

まず、コマンドのテキスト値を引用符で囲みます。次に、SQL ステートメントを 1 つのステートメントにまとめることができます (同じ where 句を共有します)。

これを試して:

    set @score1 = CONCAT("UPDATE `", helpUserTable, "` SET Title = '", newTitle, 
        "', Content = '", newContent, "' WHERE CommentsId = ", 
        CommentsId, " AND ArticleId = ", ArticleId);

@score2そして完全に削除

于 2012-08-20T12:47:08.520 に答える
0

プロシージャは、次のステートメントを生成します。

UPDATE `User66` SET Title = NOWYTitle WHERE CommentsId = 2 AND ArticleId = 1

UPDATE `User66` SET Content = NOWYContent WHERE CommentsId = 2 AND ArticleId = 1

すべてのリテラル (文字列値) を引用符で囲む必要があるため、それらは正しくありません -

UPDATE `User66` SET Title = 'NOWYTitle' WHERE CommentsId = 2 AND ArticleId = 1

UPDATE `User66` SET Content = 'NOWYContent' WHERE CommentsId = 2 AND ArticleId = 1

したがって、この方法でコードを変更します-

...
SET @score1 = CONCAT("UPDATE `", helpUserTable, "` SET Title = '", newTitle, "' WHERE CommentsId = ", CommentsId, " AND ArticleId = ", ArticleId);
...
于 2012-08-20T12:42:33.920 に答える