2010-04-27 2 views
62

У меня есть 2 поля базы данныхPDO :: PARAM для типа десятичного?

`decval` decimal(5,2) 
`intval` int(3) 

у меня есть 2 PDO запросов, которые обновляют их. Тот, который обновляет int works ok

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

+0

, пожалуйста, отправьте запрос о подготовке – Galen

+0

возможного дубликата http://stackoverflow.com/questions/1335081/what-is-the-best-way-to-bind-decimal-double-float-values-with-pdo -in-php –

ответ

61

Нет никаких PDO::PARAM для запятых и поплавков, вам нужно будет использовать PDO::PARAM_STR.

+2

Это была одна из вещей, которые я пробовал и не работал, прежде чем размещать здесь вопрос. – dmontain

+0

@dmontain: Попробуйте определить $ decval как строку (например: '' 1.0'' вместо '1.0') или использовать' strval ($ decval) '. –

+5

@dmontain: он должен работать из коробки ('PDO :: PARAM_STR' является значением по умолчанию, когда ни один не указан), и ** вы не должны ** изменять тип данных столбца. Просто добавьте значение с помощью одиночных или двойных кавычек или 'strval()' it, например: '$ update_decval-> bindParam (': decval', strval ($ decval), PDO :: PARAM_STR);'. –

0

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

+7

Это не какая-то магия, но по умолчанию для обработки параметра как строки, как в принятом ответе. – PeerBr

0

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

0

Я нашел решение, отправить десятичную параметр как PDO :: PARAM_STR, в процедуре SQL сервер магазина получить его как десятичное (интермедиат, декабрь)

PHP

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

SQL SERVER, STORE ПРОЦЕДУРА:

@valor_escala_desde decimal(18,2), 

и сделано.

Смежные вопросы