【问题标题】:Check to see if a SQL Insert was successful using Perl使用 Perl 检查 SQL 插入是否成功
【发布时间】:2022-11-10 04:58:09
【问题描述】:

我有一个使用 Perl 将数据插入数据库的脚本,如下所示:

$SQL = "INSERT into database (title,time,etc) VALUES ('$title','$time','$etc')";
eval {
    $sth = $dbh->prepare($SQL);
  }; 

  # check for errors
  if($@){
    $dbh->disconnect;
    print "Content-type: text/html\n\n";
    print "An ERROR occurred! $@\n";
    exit;
  } else {
    $sth->execute;
  } # end of if/else
  return ($sth);
}

尽管转义了违规字符,但有时用户会从 PDF 中复制和粘贴数据,这会导致插入命令失败。如何快速检查以确保插入命令成功,如果不成功,则显示错误?

【问题讨论】:

  • RaiseError 和 PrintError 使用什么值?

标签: sql perl


【解决方案1】:

检查来自execute 的返回值。如果是undef,则有错误。

有些人喜欢为其句柄设置PrintErrorRaiseError 属性。第一个给你一个警告,第二个抛出一个异常。

但是,正如安迪所说,也使用占位符。这些将正确使用这些值,因此您不必担心引用、特殊字符等:

my $SQL = "INSERT into database (title,time,etc) VALUES (?,?,?)";
...
my $rv = $sth->execute( $title, $time, $etc );
if( ! defined $rv ) { warn "Oops! $DBI::Error" }

这些占位符也可以限制其值(后端支持有所不同)。例如,您可以指定它必须是整数。在文档中查找bind_values

请参阅Bobby Tables 了解一些有趣的时间。

【讨论】:

  • 谢谢!这很有帮助。我得玩一会儿。我一直在疯狂地试图逃避角色。
【解决方案2】:

您需要使用准备好的语句和绑定变量。您不应使用来自用户的输入来创建 SQL 语句。

阅读有关占位符和绑定值的文档中的 here

【讨论】:

    猜你喜欢
    • 2018-03-30
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    相关资源
    最近更新 更多