2012-02-15 5 views
2

Insertを実行しようとしたときにRailoから非常に間違ったSQLエラーが発生しました。私は、それが何かを持っていると思う:私はそれに渡しているパラメータ値:これらを取り出して単純な文字列に置き換えるときと同じように動作します。ここでColdFusion/Railoスクリプトの "new query()"でSQLエラーが発生しました

は(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の。

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 

関連のものを指すようには思えないその行番号を調べる:

はここRailoエラーです。このクエリは200行目のようなものです!そして、前述したように、SQLは、これらを置き換えるときに機能するようです:param値。

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

ありがとう、 マイケル。

EDIT:これはあなたの問題であれば

Railo 3.3.1.000 Error (database) 

答えて

4

問題が発生しているようです。RAILO-1281 3.3.1.005で修正する必要があります。余談として

"RAILO-1281: When doing a query INSERT with CFScript "new query()" and using a cfqueryparam with addParam(), the end ")" is removed"

、あなたは、動的な値のすべてについて addParamを使用する必要があります。

+0

ありがとうございました。私は今、タグベースのCFCを使用することに戻りました。私はcfscriptを使用しようとしましたが、それはまだそれまでではないことがわかります。しかたがない!情報をありがとう。 –

+0

Btw、コメントの更新はもちろんのこと、あなたは 'query.cfc'ファイルに手作業で簡単に適用できます。しかしそれはあなた次第です。 – Leigh

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")); 
+0

これは何も解決していないようですが、代わりに別のエラーが発生します。\t関数rightのパラメータ2は正の数[0]でなければなりません。手動で間隔を削除しようとしました。運がない。 –

0

わからない試してみてください、それが使用することをお勧めします:

は言及を忘れ、Railo版ですSQLインジェクションリスクだけでなく、すべての変数に対してaddParamを使用します。

正しい形式で正しく渡され、良好な習慣を確実に遂行します。たぶん私はこれについて間違っていますが、#createODBCDateTime#はmySqlの単一引用符の内側にある必要はありませんか? addParamはこのような処理を行います。

+0

私は単純にすべてを削除したときにクエリが機能したので、問題が発生するとは思わない:param値。日付は日付/時刻の列型になります。したがって、varcharではないため、引用符を付ける必要はありません。 –

+0

@MichaelGiovanniPumoこの記事を参照してください:http://stackoverflow.com/questions/8551940/mysql-insert-datetime-int-other-datetime-field構文エラーは一重引用符を使用しないために発生します。また、公式文書を参照してください。 http://dev.mysql.com/doc/refman/5.1/en/date-and-time-literals.htmlさらに引用符を必要とする別の言及:http://stackoverflow.com/questions/5452124/inserting- integer-and-datetime-from-php-to-mysql-5-0-db-error –

+0

@Jonathan - これは日付*文字列に関連しています。 'createODBCDate'は、別々に扱われるdatetime *オブジェクト*を返します。日時オブジェクトは、単一引用符で囲む必要はありません(実際に追加すると構文エラーが発生します)。 – Leigh

関連する問題