0

問題は、クエリ CONCAT (INSERT ....) の char の例 " または ' であると思います。常にエラーが発生します。

0 16:35:45 call InsertUser(990099,2,1,"Title1","Gosc","aaa","192.168.1.1",21426,23453245,1) エラー コード: 1064。 SQL 構文; MySQL サーバーのバージョンに対応するマニュアルで、2 行目の '16:35:44, 1, 1)' 付近で使用する正しい構文を確認してください。

手順へ:

DELIMITER $$
DROP PROCEDURE IF EXISTS InsertUser $$
CREATE PROCEDURE `InsertUser`
      (UserId int, ServiceId int(11), CommentsId int(11), 
       Title varchar(255), Nick varchar(20), content text,
       Ip varchar(15), TableCrc int(5),Crc32 int(11) unsigned,
       ArticleId int(11))
BEGIN

        DECLARE tableName VARCHAR(65535);

        set tableName = CONCAT('User',userId);

        CALL CreateUsersTable(tableName);


        set @a = CONCAT("INSERT INTO `", tableName ,"` (`ServiceId`,   
                               `CommentsId`, `Title`, `Content`,`Ip`,
                               `TableCrc`, `Crc32`, `ArticleId`,`Date`,
                                `ViewStatus`, `CommentStatus`) 
                         VALUES (",ServiceId,", ",CommentsId,", '",Title,"',
                                 '",Content,"', '",Ip,"', ",TableCrc,", 
                                ",Crc32,", ",ArticleId,", 
                             ",now(),", 1, 1);");

        PREPARE stmi FROM @a;
        EXECUTE stmi;
        DEALLOCATE PREPARE stmi;          

END$$
4

1 に答える 1

0

NOW() によって返される文字列値に埋め込まれたスペースがあります。

YYYY-MM-DD HH:MM:SS
          ^

SQL ステートメントでは、これを文字列として扱う必要があります。つまり、一重引用符で囲む必要があります。別の問題として、SQL テキストの一部としてセミコロンは必要ありません。

これを変える:

", ",now(),", 1, 1);");
                   ^

これに:

", '",now(),"', 1, 1)");
   ^         ^
于 2012-08-14T15:41:26.473 に答える