会话变量用于将数据从一个表插入另一个表

时间:2009-12-01 23:21:42

标签: coldfusion

我在用户登录时为用户ID设置了一个会话变量 - 这是代码:

<cflock timeout=999 scope="Session" type="Exclusive">
  <cfset Session.IDUsers = "">
</cflock>

然后我尝试使用此会话变量将用户ID插入另一个名为'Comments'的表中,当用户添加注释时 - 尽管它不起作用,这里是我的插入注释的代码+ sessionvariable:

<cfquery ...>
  INSERT INTO comment (.... IDUsers)
  VALUES (...info ...)
  SELECT IDUsers
  FROM users
  WHERE users.IDUsers = <cfqueryparam value="#Session.IDUsers#">
</cfquery>

虽然这不起作用。这是错误 -

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 'SELECT IDUsers FROM users WHERE users.IDUsers = ''' at line 9. 

任何人都知道我要做什么?

3 个答案:

答案 0 :(得分:1)

您是否已转储会话范围以确认IDUser不是空白?

<cfdump var="#session.IDUser#">

在运行查询之前,您可能会考虑测试Session.IDUsers值是否有效。如果该值为空,我怀疑它会引发错误。

如果它是基于文本的:

<cfif len(session.IDUsers)>
    <cfquery...

如果是数字:

<cfif isNumeric(session.IDUsers)>
    <cfquery...

如果可能,我还建议在MySQL查询浏览器中运行您的查询,因为它可以帮助您解决SQL语法问题。

答案 1 :(得分:0)

你不能包括“VALUES(... info ...)”和一个选择。你必须选择其中一个,我猜这是SQl的问题。当你已经拥有id时,我也没有看到做选择的重点。所以你应该这样做:

<cfquery ...>
  INSERT INTO comment (.... IDUsers)
  VALUES (other fields...<cfqueryparam value="#Session.IDUsers#">)
</cfquery>

如果您必须执行其他查询以确保它在数据库中,那么只需在此上面执行另一个查询即可获取ID。

答案 2 :(得分:0)

实际上在上面的Dan的帖子中回答了,但是看起来你还没有工作呢......

<cfif len(session.IDUsers)>
 <!--- the session variable has some value assigned so it can be used in the query --->
 <cfquery datasource='yourDataSourceName' name="addComment">
    INSERT INTO comment (IDUsers, column1, anotherDataColumn)
    VALUES (<cfqueryparam value="#Session.IDUsers#">, #column1Data#, #anotherColumnData#)
 </cfquery>
<cfelse>
 <!--- session.IDUsers is null length --->
 <cfoutput>session.IDUsers is not yet assigned a value and therefore has no length</cfoutput>
 <cfabort>
</cfif>