PDO::ПАРАМЕТР для десятичного типа?
У меня есть 2 поля базы данных
`decval` decimal(5,2)
`intval` int(3)
У меня есть 2 запроса pdo, которые их обновляют. Тот, который обновляет int, работает нормально
$update_intval->bindParam(':intval', $intval, PDO::PARAM_INT);
Но я не могу обновить десятичное поле. Я пробовал 3 способа ниже, но ничего не работает
$update_decval->bindParam(':decval', $decval, PDO::PARAM_STR);
$update_decval->bindParam(':decval', $decval, PDO::PARAM_INT);
$update_decval->bindParam(':decval', $decval);
Похоже, проблема в типе базы данных decimal
? Существует ли PDO::PARAM
для поля типа decimal
? Если нет, то что я могу использовать в качестве обходного пути?
4 answers
Нет никакого PDO::PARAM
для десятичных знаков/чисел с плавающей запятой, вам придется использовать PDO::PARAM_STR
.
Я обнаружил, что в поисках способа хранения двойных чисел с помощью PDO, что если вы не предоставите третий аргумент (т.Е. PDO::PARAM_*), он использует какую-то магию и правильно сохраняет число. Так что, может быть, если вы просто оставите PDO беспокоиться о типе параметра и весело свяжете:decval с $decval и перейдете к следующей задаче:-))
UP должен использовать PDO::PARAM_STR то же самое, и следует отметить, что если столбец в базе данных имеет тип ЧИСЛОВОЙ (M, D) или десятичный (M, D), следует учитывать, что M - это количество символов, точность должна составлять общее количество символов, которые вы можете ввести, а D - количество десятичных знаков. В ЧИСЛОВОМ примере (10,2) у нас есть 8 домов с точностью до знаков и два знака после запятой. Таким образом, у нас всего 10 символов, 2 из которых зарезервированы для десятичных знаков.
Я нашел решение, отправьте десятичный параметр, такой как PDO::PARAM_STR, в процедуре хранилища sql server получите его как десятичный (int,dec)
PHP
$stmt_e->bindParam(':valor_escala_desde', $valor_escala_desde, PDO::PARAM_STR);
SQL SERVER, ПРОЦЕДУРА ХРАНЕНИЯ:
@valor_escala_desde decimal(18,2),
И готово.