Perl:使用一个MySQL调用更新多行

Doc*_*uie 6 mysql perl

似乎这可能是不可能的,但是嘿,我不妨问,我可能是错的.想知道是否有任何perl使用一个MySQL调用更新多行,我正在使用DBI.

任何帮助或反馈将不胜感激,这在MSSQL中通过ASP和ASP.net是可能的,因此想知道是否也可以通过MySQL上的perl.

感谢您的反馈意见!

fri*_*edo 14

首先也是最重要的,你绝对不应该直接将变量插入到SQL字符串中.这留下了SQL注入攻击的可能性.即使这些变量不是来自用户输入,也会留下可能导致数据搞乱的危险错误.

MySQL DBD驱动程序支持多个语句,但默认情况下它被关闭作为安全功能.请参阅DBD :: mysql文档中的mysql_multi_statements" 类方法"部分.

但是,一个更好的解决方案,即同时解决这两个问题并且更加便携,就是使用预处理语句和占位符值.

my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
Run Code Online (Sandbox Code Playgroud)

然后,在某种循环中获取您的数据:

while( $whatever) { 
    my ( $EC, $MR, $EM ) = get_the_data();
    $sth->execute( $EC, $MR, $EM );
}
Run Code Online (Sandbox Code Playgroud)

您只需准备一次语句,并且DBD驱动程序将替换占位符值(并保证正确引用).

阅读有关DBI文档中占位符的更多信息.

  • "DBD驱动程序"只是DBI使用的特定于后端的驱动程序,例如DBD :: mysql.但是,在任何情况下,您都不需要担心连接 - 只要您继续重复使用相同的`$ dbh`来运行语句,您将使用相同的数据库连接并且'准备一次,执行许多由friedo演示的模型比在单个字符串中传递许多查询更有效,因为它避免了必须单独解析(准备)每个查询的开销. (4认同)
  • @mastermind:无论应用程序是什么,插值总是很糟糕; 程序员错误而不是用户恶作剧造成了许多漏洞. (4认同)