簡體   English   中英

運行中的perl腳本現在顯示.DBD :: mysql :: db失敗:您的SQL語法有錯誤;

[英]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語句。 然后,您可以查看語法問題是什么,或者將其發布在此處以便我們進行診斷。

但是,更重要的是,您應該使用參數化查詢,而不是使用不受信任的外部數據構建S​​QL語句。 您將對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM