Sascha Manns Ответов: 2

Измените строку перед записью в базу данных mysql


Привет CodeProject,

в настоящее время я пишу приложение для арендодателя/Лессера.
Я создал таблицу, в которой есть столбец "Muell", определяемый как десятичный(6,2).
Я использую поле ввода с
SELECT distinct CONCAT(e.Miete, " €") AS Miete,
как содержимое по умолчанию. Если пользователь изменяет поле и оставляет"€", я сталкиваюсь с ошибкой.

Я использую это утверждение:

UPDATE tbl_nebenkosten
    SET Muell = '$Muell',
        Wasser = '$Wasser',
        Versicherung = '$Versicherung',
        Strom = '$Strom',
        Hausverwaltung = '$Hausverwaltung',
        Heizung = '$Heizung'
    WHERE MieterID = '${state.MieterID}'


Я читал Функция MySQL SUBSTRING_INDEX () - w3resource[^]. На этой странице приведен только пример с "SELECT".

В моем случае мне нужно обновление вместо этого.
К сожалению, я только начал программировать на SQL, так что многое для меня ново.

Что я уже пробовал:

UPDATE tbl_nebenkosten
    SET Müll = SELECT SUBSTRING_INDEX('$Muell',' ',1)
        Wasser = '$Wasser',
        Versicherung = '$Versicherung',
        Strom = '$Strom',
        Hausverwaltung = '$Hausverwaltung',
        Heizung = '$Heizung'
    WHERE MieterID = '${state.MieterID}'


Это дает мне ошибку.

2 Ответов

Рейтинг:
9

Sascha Manns

Я это выяснил. Это отрезанное работает как и ожидалось:

UPDATE tbl_nebenkosten
    SET Müll = TRIM(TRAILING ' €' FROM '$Muell'),
        Wasser = TRIM(TRAILING ' €' FROM '$Wasser'),
        Versicherung = TRIM(TRAILING ' €' FROM '$Versicherung'),
        Strom = TRIM(TRAILING ' €' FROM '$Strom'),
        Hausverwaltung = TRIM(TRAILING ' €' FROM '$Hausverwaltung'),
        Heizung = TRIM(TRAILING ' €' FROM '$Heizung')
    WHERE MieterID = '${state.MieterID}'

Отделка делает большую работу :-)


Рейтинг:
1

Jochen Arndt

Проверьте значения (и при необходимости очистите их, например, удалив символ валюты), прежде чем передавать их в базу данных. Это также позволяет отображать конкретные сообщения об ошибках при неверном вводе. В противном случае вы застряли на сообщениях об ошибках SQL, которые не имеют смысла для большинства пользователей.

Способ выполнения проверки зависит от используемого языка и способа передачи данных (например, из формы или импорта из файла).

Вы также должны использовать параметризованные SQL-запросы. При этом эти данные передаются как объекты а не как строки что позволяет избежать SQL-инъекция - Википедия[^].


Sascha Manns

В общем случае поле ввода подключается к контейнеру сбора данных. Там значение будет использоваться в переменной, а затем я попытаюсь сохранить его.
Само поле ввода использует запрос базы данных (упомянутая команда CONCAT), чтобы получить "старую" цену из базы данных. Таким образом, пользователь может видеть, какое значение хранится, и оно видно в поле ввода. Если пользователь ничего не изменит, переменные будут записаны в базу данных.
Что было бы хорошим утверждением для удаления"€", если оно существует?

Jochen Arndt

На этот вопрос можно ответить, только зная используемый язык программирования или фреймворк.

Sascha Manns

Я использую такого композитора как этот https://www.engomo.com/de/home/

Jochen Arndt

Тогда вам следует обратиться туда за поддержкой. Проверка входных данных и очистка должны выполняться фреймворком, а не базой данных. Там будет какая-то структура, используемая композитором. Там могут быть варианты доступа к этому, варианты проверки ввода или ничего. Но только они могли знать.

В любом случае вы можете переместить отображение символа евро из поля ввода, поместив его справа от него или внутри метки.

Sascha Manns

Привет Йохен. Я нашел решение (см. ниже). Это работает, как и ожидалось.

Jochen Arndt

Хорошо.

Но это не поможет, если кто-то введет "3.O1" (то есть букву O, а не ноль 0) или уберет пробел перед символом евро (совет: уберите его из вашего тримминга, потому что конечный пробел не должен вредить). Именно поэтому я предложил сделать валидацию перед переходом в базу данных. И я не знал, что вы используете композитора, когда отвечаете.

В этом и заключается недостаток таких инструментов:
Вы привязаны к тому, что они могут сделать.