Прежде всего, я не знаю, что вы ожидаете:
$price = str_replace(' ', '', ':price');
$price = preg_replace('/\s+/', '', $price);
делать. Но в конечном итоге у вас есть переменная с именем $price
, заполненная значением ':price'
. Я подозреваю, что это оценивается как true
, в результате чего MySQL помещает 1,00 в десятичное поле.
Я думаю, вы пытаетесь закончить тем, что запятая будет заменена десятичной точкой в цене. Это было бы ближе:
foreach($data as $row)
{
//Remove the price conversion. It did nothing
$insert_data = array(
':sym_id' => $row[0],
':code' => $row[1],
':name' => $row[2],
':quantity' => $row[3],
':price' => preg_replace('/,/', '.', $row[4]), //Replace you're comma with a point
':position' => $row[5],
':visible' => $row[6]
);
//Use only named values here. Don't put the variable '$price' in here at all
$query = "
INSERT INTO symphony
(sym_id, code, name, quantity, price, position, visible)
VALUES (:sym_id, :code, :name, :quantity, :price, :position, :visible)
";
$statement = $connect->prepare($query);
//Use insert data to fill the named parameters
$statement->execute($insert_data);
}
Но подождите ... Что произойдет, если пользователь также использует .
как разделитель тысяч и ,
как десятичный разделитель. Затем вам нужно сделать go шаг дальше и использовать программу форматирования номеров PHP. Подробности здесь: https://www.php.net/manual/en/numberformatter.parse.php
РЕДАКТИРОВАТЬ:
Я вижу, вы немного изменили строки в l oop с тех пор, как я начал писать ответ:
$price = str_replace(' ', '', ':price');
$price = str_replace(',', '.', $price);
$price = preg_replace('/\s+/', '', $price);
Эффект все тот же: в конце этих строк $price
=== ':price'
. Третий параметр str_replace
- это строка, которую изменяют эти строки, и она не содержит ни запятой, ни пробела.