Perl Mysql DBD :: mysql :: st выполнить не удалось - PullRequest
0 голосов
/ 26 октября 2018
CREATE TABLE users(

  USERID BIGINT AUTO_INCREMENT,
  FNAME  CHAR(50),                        
  LNAME  CHAR(50), 
  EMAIL  CHAR (100),               
  PHONE  CHAR (50),        
  PRIMARY KEY (USER_ID),
  UNIQUE KEY EMAIL (EMAIL),
  UNIQUE KEY PHONE (PHONE)
) ENGINE=InnoDB CHARSET=utf8mb4;


CREATE TABLE items(
  ITEMS_ID       BIGINT AUTO_INCREMENT,                       
  USERID         BIGINT,    
  ITEMS_TO       BIGINT,
  ITEMS_FROM     BIGINT,                     
  ACCEPTED_ITEMS BIGINT,                     
  PRIMARY KEY (ITEMS_ID),
  FOREIGN KEY (USERID) REFERENCES users(USERID),
  FOREIGN KEY (ITEMS_TO) REFERENCES users(USERID),
  FOREIGN KEY (ITEMS_FROM) REFERENCES users(USERID),
  FOREIGN KEY (ACCEPTED_ITEMS) REFERENCES users(USERID)
) ENGINE=InnoDB CHARSET=utf8mb4;

Я получаю эту ошибку

DBD :: mysql :: st выполнить не удалось: не удается добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (`db701``items`, CONSTRAINT `items_ibfk_2` FOREIGN KEY (` ITEMS_TO`) ССЫЛКИ `users` (` USERID`))

, когда я запускаю это:

$ID = '1';
$NULL = 'NULL';
$ID2 = '2';
$ID3 = '1';

my $update = $DBH->prepare("UPDATE items SET ITEMS_TO =?, ITEMS_FROM =? WHERE USERID =? AND ITEMS_ID = ?");
$update->execute($ID, $NULL, $ID2, $ID3);
$update->finish();

Работает без ITEMS_FROM иЯ хочу установить ITEMS_FROM на ноль.

Это работает:

my $update = $DBH->prepare("UPDATE items SET ITEMS_TO =? WHERE USERID =? AND ITEMS_ID = ?");
$update->execute($ID, $ID2, $ID3);
$update->finish();  

1 Ответ

0 голосов
/ 26 октября 2018

Не стоит ставить NULL в кавычки.Это пытается установить ITEMS_TO в буквальную строку 'NULL', а не в нулевое значение.MySQL затем попытается преобразовать это в BIGINT;поскольку оно не похоже на число, оно будет преобразовано в 0.Поскольку в таблице users нет user_id = 0, проверка внешнего ключа завершается неудачей.

Вы должны использовать значение Perl undef для представления нулевого значения SQL:

$NULL = undef;

Смотрите Какой из них представляет собой ноль?undef или пустая строка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...