我在用户登录时为用户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.
任何人都知道我要做什么?
答案 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>