【问题标题】:Inserting into a MySQL table with an auto-increment column使用自增列插入 MySQL 表
【发布时间】:2017-09-28 00:20:06
【问题描述】:

我正在尝试使用 Perl 脚本将数据插入到我的数据库中,但我的代码有问题。

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

我在提示符中启动程序时遇到的错误是:

DBD::mysql::st 执行失败:整数值不正确:C:\Users\Jean Baptiste\cours\Base de donnÚes\Dossier\programmes\remplissage_table_projet.pl 的第 1 行的列 'id_anntion' 为 'NULL'第 25 行,第 1 行。
错误插入:不正确的整数值:C:\Users\Jean Baptiste\cours\Base de donnÚes\Dossier\programmes\remplissage_table_projet.pl 第 25 行第 1 行的列 'id_anntion' 为 'NULL'。

这是代码:

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

我知道与"NULL" 部分有关,但我不知道是什么。而且我认为这不是唯一的问题。

【问题讨论】:

  • "NULL" - 是一个字符串值。尝试使用零长度字符串""。或者设置除第一列之外的列列表:insert into annotations(column2, column3, ...) values ( seven ? ); execute(@tab[0..4],"1","DB")
  • @Mike:我怀疑"" 是否有效,因为它仍然是一个字符串。调用自动增量的官方方法是传递0,如果列为NOT NULL,则传递undef,或者将列从列表中删除,什么都不传递。
  • 我为您删除了 phpMyAdmin 标签,因为这似乎与该应用程序无关。

标签: mysql sql database perl


【解决方案1】:

您正在尝试将 string "NULL" 插入到 integer 列中

如果您想覆盖自动增量行为,请在此处使用诸如 100 之类的数字

如果您希望 MySQL 生成数字,则使用零 0,或者,如果列是 NOT NULL,则可以使用 undef

【讨论】:

  • 感谢您的帮助,但我不知道应该将 undef 放在哪里。你能告诉我更多吗?
  • @J-bFiancette:代替我解释错误的"NULL"。或者你可以使用0
【解决方案2】:

在 perl 中使用 undef 在 MySQL 表中插入默认值。因此,在这里您需要将您的行修改为:
$ins->execute(undef, $tab[0], $tab[1], $tab[2], $tab[3], $tab[4], "1", "DB") or die "Erreur insertion : " . $ins->errstr();

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

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2019-05-16
    • 2015-10-04
    • 1970-01-01
    • 2018-02-05
    相关资源
    最近更新 更多