使用自动增量列插入到MySQL表中。

时间:2021-10-13 09:08:23

I'm trying to insert data into my database with a Perl script, but there's something wrong with my code.

我试图用Perl脚本将数据插入到我的数据库中,但是我的代码有问题。

I previously created a table annotations with eight columns, and the first one is an auto incremented primary key. I also need the two last columns to be filled with 1 and DB on each row.

我之前创建了一个包含8个列的表注释,第一个是自动递增的主键。我还需要在每行上填充1和DB的最后两列。

The errors I get when I launch my program in the prompt are :

当我在提示中启动程序时所得到的错误是:

DBD::mysql::st execute failed: Incorrect integer value: 'NULL' for column 'id_anntion' at row 1 at C:\Users\Jean Baptiste\cours\Base de donnÚes\Dossier\programmes\remplissage_table_projet.pl line 25, line 1.
Erreur insertion : Incorrect integer value: 'NULL' for column 'id_anntion' at row 1 at C:\Users\Jean Baptiste\cours\Base de donnÚes\Dossier\programmes\remplissage_table_projet.pl line 25, line 1.

mysql DBD::::圣执行失败:错误的整数的值:“零”列在第一行“id_anntion”C:\Users\Jean巴普蒂斯特\课程\基地de donnUes \档案\ \ remplissage_table_projet计划。第25行,第1行。插入错误:错误的整数值:“零”列在第一行“id_anntion”C:\Users\Jean巴普蒂斯特\课程\基地de donnUes \档案\ \ remplissage_table_projet计划。第25行,第1行。

And this is the code :

这是代码:

use DBI;
use strict;
use utf8;

use warnings;

my ($ligne, @tab);

# Connexion à la base de données
my $dbh = DBI->connect( "DBI:mysql:database=projet;host=localhost", "root", "" )
  or die "Erreur de connexion : " . DBI->errstr();


# Gestion de l'encodage UTF-8
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('set names utf8');

# Préparation d'une requête pour l'insertion de valeurs dans la BDD
my $ins = $dbh->prepare("INSERT INTO annotations VALUES (?, ?, ?, ?, ?, ?, ?, ?)")
  or die "Probleme preparation : " . $dbh->errstr();

open( FILEIN, '<:encoding(utf8)', 'alsace_DB.csv' );
while ( $ligne = <FILEIN> ) {
    chomp($ligne);
    @tab = split( /;/, $ligne );
    $ins->execute("NULL", $tab[0], $tab[1], $tab[2], $tab[3], $tab[4], "1", "DB")
      or die "Erreur insertion : " . $ins->errstr();
}
close(FILEIN);

# Déconnexion de la base de données
$dbh->disconnect();

I know there's something to do with the "NULL" part but I can't tell what. And I think it's not the only problem.

我知道这与“空”部分有关,但我不知道是什么。我认为这不是唯一的问题。

2 个解决方案

#1


3  

You are trying to insert the string "NULL" into an integer column

您试图将字符串“NULL”插入到整数列中。

If you want to override the autoincrement behaviour then use a number such as 100 here

如果您想要覆盖自动增量行为,那么在这里使用一个数字,比如100。

If you want MySQL to generate the numbers, then use zero 0 or, if the column is NOT NULL then you can use undef

如果你想要MySQL生成数字,然后使用0或者,如果列不是空的,那么你可以使用undef。

#2


1  

Use undef in perl for inserting default values in MySQL table. So, here you need to modify your line as:
$ins->execute(undef, $tab[0], $tab[1], $tab[2], $tab[3], $tab[4], "1", "DB") or die "Erreur insertion : " . $ins->errstr();

在perl中使用undef来插入MySQL表中的默认值。所以,在这里你需要修改你的产品线:$ins->执行(undef, $tab[0], $tab[1], $tab[2], $tab[3], $选项卡[4],“1”,“DB”)或die“Erreur插入:”。$ ins - > errstr();

In this case, it will auto-increment the column.

在这种情况下,它将自动增加列。

#1


3  

You are trying to insert the string "NULL" into an integer column

您试图将字符串“NULL”插入到整数列中。

If you want to override the autoincrement behaviour then use a number such as 100 here

如果您想要覆盖自动增量行为,那么在这里使用一个数字,比如100。

If you want MySQL to generate the numbers, then use zero 0 or, if the column is NOT NULL then you can use undef

如果你想要MySQL生成数字,然后使用0或者,如果列不是空的,那么你可以使用undef。

#2


1  

Use undef in perl for inserting default values in MySQL table. So, here you need to modify your line as:
$ins->execute(undef, $tab[0], $tab[1], $tab[2], $tab[3], $tab[4], "1", "DB") or die "Erreur insertion : " . $ins->errstr();

在perl中使用undef来插入MySQL表中的默认值。所以,在这里你需要修改你的产品线:$ins->执行(undef, $tab[0], $tab[1], $tab[2], $tab[3], $选项卡[4],“1”,“DB”)或die“Erreur插入:”。$ ins - > errstr();

In this case, it will auto-increment the column.

在这种情况下,它将自动增加列。