PDO :: PARAM для типу десяткового типу?


78

У мене є 2 поля бази даних

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

У мене є 2 запити для довідки, які їх оновлюють. Той, що оновлює 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? Якщо ні, що я використовую як обхідний шлях?


будь ласка, опублікуйте запит, який готуєтесь
Гален

можливий дублікат stackoverflow.com/questions/1335081/…
Alix Axel

Відповіді:


88

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


2
Це була одна з речей, які я намагався і не працював, перш ніж розмістити запитання тут.
dmontain

@dmontain: Спробуйте визначити $ decval як рядок (наприклад: '1.0'замість 1.0) або використовуйте strval($decval).
Alix Axel

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

@Alix, я не уявляю, чому strvalне працює. Це звучить як цілком логічна відповідь, але там щось не працює. Я пробую різні комбінації, щоб перевірити, чи не спрацює якась із них.
dmontain

17
@dmontain: З керівництва PHP: На відміну від PDOStatement :: bindValue (), змінна прив'язується як посилання і буде обчислюватися лише під час виклику PDOStatement :: execute (). - bindValue()натомість вам потрібно використовувати, якщо ви хочете використовувати strval().
Алікс Аксель

0

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


0

Я знайшов рішення, надішліть десятковий параметр, як PDO :: PARAM_STR, у процедурі зберігання сервера sql отримайте його як десятковий (int, dec)

PHP

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

SQL-СЕРВЕР, ПРОЦЕДУРА МАГАЗИНУ:

@valor_escala_desde decimal(18,2),

і готово.


0

використовуйте PDO :: PARAM_STR для всіх типів стовпців, які не належать до типу int або Bool

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.