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? Если нет, то что я могу использовать в качестве обходного пути?

Author: Your Common Sense, 2010-04-27

4 answers

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

 68
Author: Alix Axel, 2010-04-27 04:28:11

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

 0
Author: Peter Perháč, 2010-08-02 11:37:25

UP должен использовать PDO::PARAM_STR то же самое, и следует отметить, что если столбец в базе данных имеет тип ЧИСЛОВОЙ (M, D) или десятичный (M, D), следует учитывать, что M - это количество символов, точность должна составлять общее количество символов, которые вы можете ввести, а D - количество десятичных знаков. В ЧИСЛОВОМ примере (10,2) у нас есть 8 домов с точностью до знаков и два знака после запятой. Таким образом, у нас всего 10 символов, 2 из которых зарезервированы для десятичных знаков.

 0
Author: Gil, 2013-08-06 19:41:23

Я нашел решение, отправьте десятичный параметр, такой как 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),

И готово.

 0
Author: julio castillo, 2015-09-29 23:15:01