PDO:: PARAM для типа decimal?


у меня есть 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 63

4 ответа:

нет PDO::PARAM для десятичных знаков / поплавков, вам придется использовать PDO::PARAM_STR.

Я узнал, ища способ хранения DOULBEs с помощью PDO, что если вы не предоставляете третий аргумент (т. е. PDO::PARAM_*), он использует какую-то магию и сохраняет число правильно. Так что, возможно, если вы просто оставили PDO, чтобы беспокоиться о типе параметра и весело привязать: decval к $decval и перейти к следующей задаче : -))

UP должен использовать PDO:: PARAM_STR то же самое, и отмечая, что если столбец в базе данных имеет тип NUMERIC (M, D) или decimal (M, D), следует отметить, что M-это количество символов, точность должна быть общим количеством символов, которые вы можете ввести, и D-количество десятичных знаков. В Примере NUMERIC (10,2) мы имеем 8 домов до мест точности и два десятичных знака. Таким образом, у нас есть 10 символов в общей сложности с 2 зарезервированы для десятичных знаков.

Я нашел решение, отправьте десятичный параметр, например PDO:: PARAM_STR, в процедуре хранилища sql server получите его как decimal (int,dec)

PHP

$stmt_e->bindParam(':valor_escala_desde', $valor_escala_desde, PDO::PARAM_STR);

SQL SERVER, ПРОЦЕДУРА ХРАНЕНИЯ:

@valor_escala_desde decimal(18,2),

и делается.