Я пытаюсь создать процедуру, которая создает новую строку и возвращает идентификатор автоматического увеличения - PullRequest
0 голосов
/ 12 февраля 2020

идентификатор идеи для вставки новой строки в таблицу "pag" и получения ID_pag, который получил новая строка

Я пытался 2 дня, но все, что я могу получить, это эта ошибка :

  • 1064 - в синтаксисе SQL возникла ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с '' в строке 4 *

    или этого, если ";" удален
  • 1064 - в вашем синтаксисе SQL произошла ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с 'SET ID = LAST_INSERT_ID ()' в строке 5 *

    я использую MariaDB:

Сервер базы данных

Server: 127.0.0.1 via TCP/IP
Server type: MariaDB
Server connection: SSL is not being used Documentation
Server version: 10.4.6-MariaDB - mariadb.org binary distribution
Protocol version: 10
User: root@localhost
Server charset: cp1252 West European (latin1)

Веб-сервер

Apache/2.4.41 (Win64) OpenSSL/1.1.1c PHP/7.3.9
Database client version: libmysql - mysqlnd 5.0.12-dev - 20150407 - 
PHP extension: mysqliDocumentation curlDocumentation mbstringDocumentation
PHP version: 7.3.9

Вот мой код

CREATE procedure insertpag (IN `v1` INT(5), IN `v2` CHAR(50), IN `v3` INT(10), IN `v4` CHAR(50))NOT 
DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER 
BEGIN
    INSERT INTO `tabllename` (`C1`, `c2`, `c3`,`c4`)values(v1, v2, v3, v4);
    SELECT LAST_INSERT_ID();
END 


Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Извините, мой первый код был верным, но, по-видимому, моя версия базы данных позволяла вам выбрать символ, который будет использоваться в качестве метки "РАЗДЕЛИТЕЛЬ" в интерфейсе SQL. символ по умолчанию ";" поэтому каждый раз, когда я запускал процесс, он действительно выполнял

CREATE procedure insertpag (IN `USU` BIGINT(50), IN `CON` CHAR(55), IN `Mont` INT(10), IN `ROB` CHAR(55), INOUT `ID` INT(12))NOT 
DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER 
BEGIN
    INSERT INTO `pag` (`CONCEPT`, `MON`, `USUER_PAG`,`COMPROB`)values(CON, Mont, USU, ROB)delimiter ;
    SET ID = LAST_INSERT_ID()delimiter ;
END 

, и это было причиной синтаксической ошибки.

0 голосов
/ 12 февраля 2020

Поскольку вы создаете процедуру не с помощью PHP, а с помощью клиента командной строки, вам необходимо установить разделитель.

> delimiter //
> CREATE PROCEDURE ...
  BEGIN
  END //
> delimiter ;

В противном случае я бы рекомендовал использовать вместо этого функцию api mysqli_insert_id() усложнить понимание кода и передать логи c на сервер базы данных.

...