[英]working perl ascript now says .DBD::mysql::db do failed: You have an error in your SQL syntax;
我得到了这个Perl脚本,直到最近它一直可以正常工作。 我收到此错误消息。
DBD :: mysql :: db失败:您的SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册,以在''')ON DUPLICATE KEY UPDATE value ='''附近的import_productfeatures.pl第71行使用正确的语法。DBD :: mysql :: db失败:您的SQL语法有误; 检查与您的MySQL服务版本相对应的手册,以正确的语法在import_productfeatures.pl第71行的第2行的''')ON DUPLICATE KEY UPDATE value ='''附近使用。
foreach my $feature (@features) {
my $cat_featureid = $feature->{CategoryFeature_ID};
my $value = $feature->{Presentation_Value};
my $sql = "INSERT INTO products_features (product_id, feature_id, value)
VALUES (".$prodid.", ".$cat_featureid.", ".$dbh->quote($value).")
ON DUPLICATE KEY UPDATE value=".$dbh->quote($value);
$dbh->do($sql);
}
您应该使用占位符,而不是将值直接放入字符串中:
my $sql = "INSERT INTO products_features (product_id, feature_id, value)
VALUES (?,?,?)
ON DUPLICATE KEY UPDATE value=?";
my $sth = $dbh->prepare($sql);
foreach my $feature (@features) {
my $cat_featureid = $feature->{CategoryFeature_ID};
my $value = $feature->{Presentation_Value};
$sth->execute($prodid,$cat_featureid,$value,$value);
}
$sth->finish();
DBI将为您处理正确的转义。
打印$sql
的值,以便可以看到正在构建的SQL语句。 然后,您可以查看语法问题是什么,或者将其发布在此处以便我们进行诊断。
但是,更重要的是,您应该使用参数化查询,而不是使用不受信任的外部数据构建SQL语句。 您将对SQL注入持开放态度。 有关如何正确执行此操作的示例,请参见http://bobby-tables.com/perl.html 。
我想你错过了单引号。
更改
my $sql = "INSERT INTO products_features (product_id, feature_id, value)
VALUES (".$prodid.", ".$cat_featureid.", ".$dbh->quote($value).")
ON DUPLICATE KEY UPDATE value=".$dbh->quote($value);
至
my $sql = "INSERT INTO products_features (product_id, feature_id, value)
VALUES (".$prodid.", ".$cat_featureid.", '".$dbh->quote($value)."')
ON DUPLICATE KEY UPDATE value='".$dbh->quote($value."'");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.