Falscheingaben verbieten

Falscheingaben verbieten

am 30.08.2007 11:29:27 von 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?


denn leider ist ja

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

nicht erlaubt.


Danke Frank

Re: Falscheingaben verbieten

am 30.08.2007 11:42:18 von Christian Kirsch

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

Re: Falscheingaben verbieten

am 30.08.2007 12:33:04 von Frank Kulow

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

Re: Falscheingaben verbieten

am 30.08.2007 13:06:53 von Andreas Kretschmer

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

Re: Falscheingaben verbieten

am 30.08.2007 13:07:38 von Sven Paulus

Frank Kulow 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.

Re: Falscheingaben verbieten

am 31.08.2007 14:11:13 von Hartmut Holzgraefe

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

Re: Falscheingaben verbieten

am 31.08.2007 14:15:09 von Hartmut Holzgraefe

Hartmut Holzgraefe wrote:

> das Timestamp-Feld über ein VIEW verbergen?

hm ... das löst nur den Timestamp-Teil aber
nicht den User-Part ...