Переменные сеанса для вставки данных из одной таблицы в другую - PullRequest
0 голосов
/ 02 декабря 2009

Я установил переменную сеанса для идентификатора пользователя, когда пользователь входит в систему - вот код:

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

Затем я пытаюсь использовать эту переменную сеанса для вставки идентификатора пользователя в другую таблицу под названием «Комментарии», когда пользователи добавляют комментарий - хотя это не работает, вот мой код для вставки комментария + переменная сеанса:

<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 ]

1 голос
/ 03 декабря 2009

Вы сбросили область сеанса, чтобы убедиться, что IDUser не пуст?

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

Вы можете проверить, что значение Session.IDUsers является допустимым перед выполнением запроса. Если это значение пустое, я подозреваю, что это приведет к ошибке.

если текст основан:

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

если оно числовое:

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

Если возможно, я бы также порекомендовал запустить ваш запрос в браузере запросов MySQL, так как это поможет вам устранить неполадки в синтаксисе SQL.

0 голосов
/ 04 декабря 2009

На самом деле ответ дан в посте Дэна выше, но, похоже, у вас это еще не работает ...

<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>
0 голосов
/ 02 декабря 2009

Вы не можете включать "VALUES (... info ...)" И выбор. Вы должны выбрать один или другой, и я предполагаю, что это проблема SQl. Также я не вижу особого смысла в выборе, когда у вас уже есть идентификатор. Так что вы должны просто сделать это:

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

если вы должны выполнить другой запрос, чтобы убедиться, что он находится в БД, просто выполните другой запрос над этим, чтобы получить идентификатор.

...