Проблема с Mysql и использованием функции последней вставки идентификатора - PullRequest
0 голосов
/ 29 января 2019

Когда я запускаю свой запрос, я получаю эту ошибку

У вас есть ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с 'select last_insert_id () as productid' в строке 3

NativeErrorCode номер 1064

строка queryError:

insert into products (systemname, systemversion, created_date) 
values ('web andrea', '', now()); select last_insert_id() as productid;

Строка DatabaseName строка MySQL

Строка DatabaseVersion строка 5.6.10-log

DriverName строка MySQL-AB Драйвер JDBC

insert into products (systemname, systemversion, created_date) values ('web andrea', '', now()); select last_insert_id() as productid;

Я ожидал данныхвставляется, но здесь не получается.

Заранее спасибо

Андреа

Ответы [ 2 ]

0 голосов
/ 29 января 2019

В дополнение к комментарию @ GMB причина его ошибки заключается в том, что по умолчанию из-за безопасности НЕ допускается использование нескольких операторов - для защиты от внедрения SQL.Их можно включить, добавив к настройкам DSN , добавив allowMultiQueries=true.Тем не менее, убедитесь, что ВСЕ запросы используют cfqueryparam для защиты от внедрения SQL.

Сказав это, вам не нужны ни last_insert_id(), ни несколько операторов.Вместо этого используйте атрибут результата cfquery .После вставки CF заполняет переменную yourResultName.GENERATEDKEY новым идентификатором записи

<cfquery result="yourResultName" datasource="yourDSN">
   insert into products (systemname, systemversion, created_date) 
   values (
      <cfqueryparam value="web andrea" cfsqltype="cf_sql_varchar">
      , <cfqueryparam value="" cfsqltype="cf_sql_varchar">
      , now()
   )
</cfquery>

<!--- DEMO --->
<cfoutput>
   New ID (yourResultName.GENERATEDKEY) = #yourResultName.GENERATEDKEY#
</cfoutput>
0 голосов
/ 29 января 2019

Вы не запускаете один запрос, но два запроса : INSERT, затем SELECT.

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

Обратите внимание, что, вероятно, ваш драйвер базы данных имеет встроенную функцию для возврата последнего вставленного идентификатора (эквивалент для mysqli_insert_id в PHP).

...