【问题标题】:Inserting an array with single quotes(') in database with perl DBI使用 perl DBI 在数据库中插入带有单引号(')的数组
【发布时间】:2016-06-17 20:27:49
【问题描述】:

我正在尝试将一个数组插入数据库,我的查询如下:

DBD::mysql::st 执行失败:在 main.pl 第 114 行第 7 行需要 3 个绑定变量时使用 8 个绑定变量调用。

my $sql_in = "INSERT INTO $table VALUES(?,?,?,'','','','')";
my $stmt_in = $dbh->prepare($sql_in) or die "Couldn't prepare statement: ".$dbh->errstr;
$stmt_in->execute($q_num,$datatype,@qq) or die "Couldn't execute statement:".$stmt_in->errstr;
$stmt_in->finish;

@qq 包含以下测试:

报告@其众多问题之一是最近的@扩展 女装销售下滑,这家拥有七家商店的零售商表示将 在其所有商店开始为期三个月的清算销售。 (A) 它的许多问题是最近的 (B) 它的许多问题是最近的 最近 (C) 它的许多问题是最近 (D) 他们的许多问题 是最近的(E)他们的许多问题都是最近的

【问题讨论】:

  • 您能否展示创建@qq的实际代码
  • 错误信息显示@qq 有 8 个值,应该包含 3。我们知道它应该包含 3,因为 premare 语句中有 3 个问号。但是我们无法从您的描述中看出它实际包含多少值,也无法判断 prepare 语句是否正确。你的表$table的列名是什么?
  • "@qq 包含以下测试" - 这不是很有帮助。 @qq 是一个数组,您告诉我们它包含一个标量值。此文本是否拆分为 @qq 的各个元素?都在$qq[0]@qq的其他元素中的其他值吗?
  • 我已经改变了我的方法,但是为了理解:@qq 包含 6 个元素(6 行)。

标签: mysql perl


【解决方案1】:

当您执行查询时,每个 SQL 参数 (?) 必须接收正好一个值。数组@qq 包含多个值。根据错误信息,数组必须包含六个元素。

查看您的查询,我猜您希望数组的全部内容进入单个字段。如果是这样,您应该可以使用

$stmt_in->execute($q_num,$datatype, join("\n", @qq)) or die...

要实现这一点,可能会将\n 替换为您希望在数组值之间插入的另一个字符/字符串。

或者,如果您只想插入数组中的第一个元素(可能是这种情况,因为问题只显示了一个元素),请使用

$stmt_in->execute($q_num,$datatype,$qq[0]) or die...

如果要插入所有数组元素,每个元素都插入表中的单独字段,则需要使用正确数量的占位符构造一个查询,如果数组的大小是可变的,最有可能使用join(', ', ('?') x @qq)

【讨论】:

  • 我使用了将所有 '\n' 替换为特殊字符的方法。这行得通。感谢您在答案中提供不同的选项。
猜你喜欢
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
相关资源
最近更新 更多