概要(Overview)
商品のデータをCSVで更新(※新規登録ではない)する際に、在庫数を1,000のようにカンマを含めるとカンマ以降が無視して保存される。
在庫数「1,000」で入力 → 「1」で保存される。
ただしsql_modeによっては、保存されずエラーで固まる。
その際はajax中に下記エラーが発生している。
An exception occurred while executing a query: SQLSTATE[HY000]: General error: 1366 Incorrect decimal value: ‘1,000’ for column ‘stock’ at row 1
原因は、カンマを除いてバリデーションした後で、元のカンマ付きの文字列をsetStockに渡していること。
|
$stock = str_replace(',', '', $row[$headerByKey['stock']]); |
|
if (preg_match('/^\d+$/', $stock) && $stock >= 0) { |
|
$ProductClass->setStock($row[$headerByKey['stock']]); |
|
} else { |
|
$message = trans('admin.common.csv_invalid_greater_than_zero', ['%line%' => $line, '%name%' => $headerByKey['stock']]); |
|
$this->addErrors($message); |
|
} |
再現手順(Procedure)
- 商品CSV登録で既存商品の更新CSVを作る
- 在庫数を1,000などカンマ入りにする
- CSV登録を実行する
環境(Environment)
EC-CUBE4.3
MySQLで確認しましたがポスグレでもエラーになると思います。
概要(Overview)
商品のデータをCSVで更新(※新規登録ではない)する際に、在庫数を1,000のようにカンマを含めるとカンマ以降が無視して保存される。
在庫数「1,000」で入力 → 「1」で保存される。
ただしsql_modeによっては、保存されずエラーで固まる。
その際はajax中に下記エラーが発生している。
An exception occurred while executing a query: SQLSTATE[HY000]: General error: 1366 Incorrect decimal value: ‘1,000’ for column ‘stock’ at row 1
原因は、カンマを除いてバリデーションした後で、元のカンマ付きの文字列をsetStockに渡していること。
ec-cube/src/Eccube/Controller/Admin/Product/CsvImportController.php
Lines 1613 to 1619 in 9637ad4
再現手順(Procedure)
環境(Environment)
EC-CUBE4.3
MySQLで確認しましたがポスグレでもエラーになると思います。