Falscheingaben verbieten

Hallo NG,

für eine Tabelle:

CREATE TABLE IF NOT EXISTS t (ts TIMESTAMP,name VARCHAR(20));

soll es so sein:

INSERT INTO t VALUES(NULL,USER());


wie kann ich verhindern, dass so etwas:

INSERT INTO t VALUES('2000-01-01 11:11:11','bin ich nicht');

angenommen wird?


denn leider ist ja

CREATE TABLE IF NOT EXISTS t (ts NOW(),name USER());

nicht erlaubt.


Danke Frank
Frank Kulow [ Do, 30 August 2007 11:29 ] [ ID #1808699 ]

Re: Falscheingaben verbieten

Am 30.08.2007 11:29 schrieb Frank Kulow:
> Hallo NG,
>
> für eine Tabelle:
>
> CREATE TABLE IF NOT EXISTS t (ts TIMESTAMP,name VARCHAR(20));
>
> soll es so sein:
>
> INSERT INTO t VALUES(NULL,USER());
>
>
> wie kann ich verhindern, dass so etwas:
>
> INSERT INTO t VALUES('2000-01-01 11:11:11','bin ich nicht');
>
> angenommen wird?
>

Indem Du definierst, was erlaubte und was nicht erlaubte Eingaben sind.

>
> denn leider ist ja
>
> CREATE TABLE IF NOT EXISTS t (ts NOW(),name USER());
>
> nicht erlaubt.

Äh, der Default von TIMESTAMP ist doch ohnehin NOW(). Außerdem kennt
MySQL Trigger. Näheres dazu in der Dokumentation unter dev.mysql.com/doc

--
Christian
Christian Kirsch [ Do, 30 August 2007 11:42 ] [ ID #1808700 ]

Re: Falscheingaben verbieten

Christian Kirsch schrieb:

> Äh, der Default von TIMESTAMP ist doch ohnehin NOW().

Default ja, aber man kann auch irgendwas anderes reinschreiben.

Außerdem kennt
> MySQL Trigger. Näheres dazu in der Dokumentation unter dev.mysql.com/doc
>

Danke, an den dachte ich noch nicht.

Frank
Frank Kulow [ Do, 30 August 2007 12:33 ] [ ID #1808702 ]

Re: Falscheingaben verbieten

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Andreas Kretschmer [ Do, 30 August 2007 13:06 ] [ ID #1808704 ]

Re: Falscheingaben verbieten

Frank Kulow <kulow [at] gmx.de> wrote:
>> Außerdem kennt
>> MySQL Trigger. Näheres dazu in der Dokumentation unter dev.mysql.com/=
doc
> Danke, an den dachte ich noch nicht.

Allerdings gibt es bei MySQL-Triggern keine offizielle Moeglichkeit zu sag=
en
"Fehler, diese Zeile doch nicht einfuegen". Du musst sowas wie eine Divisi=
on
by Zero, Duplicate Rows o.ae. hervorrufen, damit Du im Fehlerfall aus dem
Trigger aussteigen kannst.
Sven Paulus [ Do, 30 August 2007 13:07 ] [ ID #1808705 ]

Re: Falscheingaben verbieten

Frank Kulow wrote:
> für eine Tabelle:
>
> CREATE TABLE IF NOT EXISTS t (ts TIMESTAMP,name VARCHAR(20));
>
> soll es so sein:
>
> INSERT INTO t VALUES(NULL,USER());
>
>
> wie kann ich verhindern, dass so etwas:
>
> INSERT INTO t VALUES('2000-01-01 11:11:11','bin ich nicht');
>
> angenommen wird?

das Timestamp-Feld über ein VIEW verbergen?

mysql> CREATE VIEW t2 AS SELECT name FROM t;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t2 values ("foo");
Query OK, 1 row affected (0.00 sec)

mysql> select * from t;
+---------------------+------+
| ts | name |
+---------------------+------+
| 2007-08-31 14:10:31 | foo |
+---------------------+------+
1 row in set (0.00 sec)
Hartmut Holzgraefe [ Fr, 31 August 2007 14:11 ] [ ID #1809668 ]

Re: Falscheingaben verbieten

Hartmut Holzgraefe wrote:

> das Timestamp-Feld über ein VIEW verbergen?

hm ... das löst nur den Timestamp-Teil aber
nicht den User-Part ...
Hartmut Holzgraefe [ Fr, 31 August 2007 14:15 ] [ ID #1809669 ]
Datenbanken » de.comp.datenbanken.mysql » Falscheingaben verbieten

Vorheriges Thema: WHERE mit <= und >=
Nächstes Thema: Client hängtbei unterbrochener Netzwerkverbindung