Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl Mysql DBD::Mysql::st执行失败_Mysql_Perl - Fatal编程技术网

Perl Mysql DBD::Mysql::st执行失败

Perl Mysql DBD::Mysql::st执行失败,mysql,perl,Mysql,Perl,我得到这个错误 DBD::mysql::st execute失败:无法添加或更新子行:a 外键约束失败(`db701`.`items`,约束 `items_ibfk_2`外键(`items_TO`)引用`users`(`USERID`) 当我运行此命令时: CREATE TABLE users( USERID BIGINT AUTO_INCREMENT, FNAME CHAR(50), LNAME CHAR(50), EMA

我得到这个错误

DBD::mysql::st execute失败:无法添加或更新子行:a 外键约束失败(`db701`.`items`,约束 `items_ibfk_2`外键(`items_TO`)引用`users`(`USERID`)

当我运行此命令时:

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;
它在没有ITEMS_FROM的情况下工作,我想将ITEMS_FROM设置为null

这项工作:

$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();

你不应该在引号中加上
NULL
。这是试图将
ITEMS\u设置为
文本字符串
'NULL'
,而不是空值。MySQL将尝试将其转换为
BIGINT
;由于它看起来不像一个数字,因此将转换为
0
。由于
users
表中没有
user\u id=0
,因此外键检查失败

您应该使用Perl值
unde
来表示SQL空值:

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

请参见您不应该在引号中加
NULL
。这是试图将
ITEMS\u设置为
文本字符串
'NULL'
,而不是空值。MySQL将尝试将其转换为
BIGINT
;由于它看起来不像一个数字,因此将转换为
0
。由于
users
表中没有
user\u id=0
,因此外键检查失败

您应该使用Perl值
unde
来表示SQL空值:

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

请看

我想你的问题中有几个零散的
+
符号,但我不能肯定。(例如,
中有一个用于+eign
,后面的代码中也有几个。)请编辑您的问题,删除不属于您的问题。交叉张贴在我想您的问题中有几个零散的
+
符号,但我不能确定。(例如,
for+eign
中有一个问题,后面的代码中也有几个问题。)请编辑您的问题,删除不属于您的问题。交叉发布在