如何插入新行Mariadb perl

问题描述 投票:0回答:1

我的主机从 mySQL 迁移到 MariaDB。这是一个 perl cgi.pm 脚本。如果我使用DBI; 和 DBD::MariaDB;大多数内容都可以很好地转换到新数据库。但是当我尝试插入新行时,它需要每列的数据。我得到: 软件错误: DBD::MariaDB::st 执行失败:整数值不正确:'' 位于 myscript.cgi 第 18302 行第 1 行的列

mydb
mytable
mycolumn

my $dbh = DBI->connect("DBI:MariaDB:database=$database;host=localhost", $MYSQLuserid, $MYSQLpassword, { RaiseError => 1, PrintError => 0 }); my $sth = $dbh->prepare("INSERT INTO mytable ($placeholders) values ($questionmarks)"); $sth->execute(@new_row) or die "Failed to execute statement: " . $sth->errstr; $new_order_number = $sth->{LAST_INSERT_ID}; $sth->finish() or die $DBI::errstr; $dbh->disconnect() or die $DBI::errstr;
我尝试将 NULL 修改为:NOT NULL、NULL/none/as Defined 和 NULL。
这对于 mysql 来说从来都不是问题,我需要能够将列留空以供将来使用。
尝试了代码的许多变体。
谢谢你的想法。

mysql perl mariadb cgi.pm
1个回答
0
投票
您遇到的问题与 MariaDB 和 MySQL Handless

null

 以及具有 
not null
 的列中的空字符串有关。我会检查 
mytable
 中给您带来麻烦的列是否已正确定义。在 MariaDB 中,如果您尝试向其中插入空字符串,则会抛出错误,尤其是对于整数列。

您需要调整 Perl 脚本以处理传递空字符串。您可以将该值设置为

undef

(在 SQL 中对应于 NULL)或确保列可以接受空字符串。

use DBI; use DBD::MariaDB; my $dbh = DBI->connect("DBI:MariaDB:database=$database;host=localhost", $MYSQLuserid, $MYSQLpassword, { RaiseError => 1, PrintError => 0 }); # Ensure that any empty strings are converted to undef if the column should allow NULLs my @new_row = map { $_ eq '' ? undef : $_ } @new_row; my $sth = $dbh->prepare("INSERT INTO mytable ($placeholders) VALUES ($questionmarks)"); $sth->execute(@new_row) or die "Failed to execute statement: " . $sth->errstr; $new_order_number = $sth->{mysql_insertid}; # Note: Use mysql_insertid to get the last insert id $sth->finish() or die $DBI::errstr; $dbh->disconnect() or die $DBI::errstr;
如果列应具有默认值或接受 

NULL

,请确保它在数据库模式中以这种方式定义。如果列是 
NOT NULL
 并且没有默认值,则必须在插入期间提供一个值。

© www.soinside.com 2019 - 2024. All rights reserved.