2

挿入しようとすると、Railoから非常に役に立たないSQLエラーが発生します。渡した:param値と関係があると思います。これらを取り出して単純な文字列に置き換えると、機能します。

これが私のコードです(CFC内にあります):

local.registerUserQuery = new query();
            local.registerUserQuery.setDatasource("popwave");
            local.registerUserQuery.setSQL("

                INSERT INTO users (

                    userUUID,
                    userName,
                    userPassword,
                    userEmail,
                    userToken,
                    userCreated,
                    userBiography,
                    userCommentPoints,
                    userLinkPoints,
                    userImageID,
                    userRemoved,
                    userCategoriesOwner,
                    userCategoriesSubscribed

                )

                VALUES (

                    '#createUUID()#' , 
                    :userName , 
                    :userPassword , 
                    :userEmail , 
                    '#local.token#' , 
                    #createODBCDate(now())# , 
                    '' , 
                    0, 
                    0, 
                    0, 
                    0, 
                    0, 
                    0 

                )

            "); 

            local.registerUserQuery.setName("registerUser");

            local.registerUserQuery.addParam( name="userName", value="#arguments.userName#", cfsqltype="cf_sql_varchar" ); 
            local.registerUserQuery.addParam( name="userPassword", value="#arguments.userPassword#", cfsqltype="cf_sql_varchar" ); 
            local.registerUserQuery.addParam( name="userEmail", value="#arguments.userEmail#", cfsqltype="cf_sql_varchar" );

            local.registerUserQuery.execute();

なぜこれがエラーをスローしているのか、私は一生理解できません!:paramを使用できるようにする必要があります。

Railoエラーは次のとおりです。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 49

その行番号を調べても、関連するものは何も示されていないようです。このクエリは200行目のようなものです!そして、前述のように...これらの:param値を置き換えるとSQLが機能するようです。

私がここで間違っていることは実際にありますか?髪を抜く!

ありがとう、マイケル。

編集:

言及するのを忘れて、Railoバージョンは次のとおりです。

Railo 3.3.1.000 Error (database)
4

3 に答える 3

4

3.3.1.005で修正されるはずの問題RAILO-1281が発生しているようです。

"RAILO-1281:CFScript" new query() "でクエリINSERTを実行し、addParam()でcfqueryparamを使用すると、末尾の")"が削除されます"

余談ですがaddParam、すべての動的な値に使用する必要があります。

于 2012-02-15T18:45:31.953 に答える
0

これを試して

local.registerUserQuery.setSQL(reReplace("

            INSERT INTO users (

                userUUID,
                userName,
                userPassword,
                userEmail,
                userToken,
                userCreated,
                userBiography,
                userCommentPoints,
                userLinkPoints,
                userImageID,
                userRemoved,
                userCategoriesOwner,
                userCategoriesSubscribed

            )

            VALUES (

                '#createUUID()#' , 
                :userName , 
                :userPassword , 
                :userEmail , 
                '#local.token#' , 
                #createODBCDate(now())# , 
                '' , 
                0, 
                0, 
                0, 
                0, 
                0, 
                0 

            )

        ", "\t|\n", " ", "all")); 
于 2012-02-15T17:23:37.210 に答える
0

これが問題かどうかはわかりませんが、SQLインジェクションのリスクだけでなく、すべての変数にaddParamを使用することをお勧めします。

それはそれらが正しいフォーマットで正しく渡されることを保証し、また良い習慣を強制します。たぶん私はこれについて間違ってい#createODBCDateTime#ますが、mySqlの単一引用符の中にある必要はありませんか?addParamがこのようなことを行います。

于 2012-02-15T17:32:12.643 に答える