加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

通过Perl的DBI $sth-> execute()函数将字符串插入数据库时??

发布时间:2020-12-16 06:16:54 所属栏目:大数据 来源:网络整理
导读:我正在使用Perl的DBI和SQLite数据库(我安装了DBD :: SQLite).我有以下代码: my $dbh = DBI-connect("dbi:SQLite:dbname=$db","",{ RaiseError = 1,AutoCommit = 1 });...my $q = "INSERT OR IGNORE INTO books (identica,book_title) VALUES (?,?)";my $sth
我正在使用Perl的DBI和SQLite数据库(我安装了DBD :: SQLite).我有以下代码:

my $dbh = DBI->connect("dbi:SQLite:dbname=$db","",{ RaiseError => 1,AutoCommit => 1 });
...
my $q = "INSERT OR IGNORE INTO books (identica,book_title) VALUES (?,?)";
my $sth = $dbh->prepare($q);
$sth->execute($book_info->{identica},$book_info->{book_title});

我遇到的问题是,当$book_info-> {identica}以0开头时,它们会被删除,我会在数据库中插入一个数字.

例如,00123的identica将转换为123.

我知道SQLite没有类型,那么如何让DBI将identica作为字符串而不是数字插入?

我在传递给$sth->执行时尝试将其引用为“$book_info-> {identica}”,但这没有帮助.

编辑

即使我直接在查询中插入值,它也不起作用:

my $i = $book_info->{identica};
my $q = "INSERT OR IGNORE INTO books (identica,book_title) VALUES ('$i',?)";
my $sth = $dbh->prepare($q);
$sth->execute($book_info->{book_title});

这仍然会转换为00123到123,以及0000000009到9 ……

编辑

天啊,我在命令行上做了这个,我得到了这个:

sqlite> INSERT INTO books (identica,book_title) VALUES ('0439023521','a');
sqlite> select * from books where id=28;
28|439023521|a|

它被SQLite删除了!

以下是架构的外观:

CREATE TABLE books (
  id                INTEGER PRIMARY KEY AUTOINCREMENT,identica          STRING  NOT NULL,);

CREATE UNIQUE INDEX IDX_identica       on books(identica);
CREATE INDEX IDX_book_title            on books(book_title);

有什么想法发生了什么?

这是sqlite问题,请参阅Jim的评论中的回答. STRING必须是sqlite中的TEXT.否则它将其视为数字!

将模式更改为以下解决方案:

CREATE TABLE books (
  id                INTEGER PRIMARY KEY AUTOINCREMENT,identica          TEXT  NOT NULL,);

解决方法

使用 bind params

my $sth = $dbh->prepare($q);
$sth->bind_param(1,00123,{ TYPE => SQL_VARCHAR });
$sth->bind_param(2,$book_info->{book_title});
$sth->execute();

更新:

阅读有关type affinity in SQLite.由于您的列类型为STRING(技术上不受支持),因此默认为INTEGER亲缘关系.您需要将列创建为TEXT.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读