2009-04-26 6 views
2

Ich habe die folgende Tabelle:mysql Warnungen

CREATE TABLE `events` (
    `evt_id` int(11) NOT NULL AUTO_INCREMENT, 
    `evt_name` varchar(50) NOT NULL, 
    `evt_description` varchar(100) DEFAULT NULL, 
    `evt_startdate` date NOT NULL, 
    `evt_enddate` date DEFAULT NULL, 
    `evt_starttime` time DEFAULT NULL, 
    `evt_endtime` time DEFAULT NULL, 
    `evt_amtpersons` int(11) DEFAULT NULL, 
    `sts_id` int(11) NOT NULL, 
    `adr_id` int(11) DEFAULT NULL, 
    `evt_amtPersonsSubs` int(11) DEFAULT NULL, 
    `evt_photo` varchar(50) DEFAULT NULL, 
    `sys-mut-dt` timestamp NULL DEFAULT NULL, 
    `sys-mut-user` varchar(20) DEFAULT NULL, 
    `sys-mut-id` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`evt_id`), 
    KEY `sts_id` (`sts_id`), 
    KEY `adr_id` (`adr_id`), 
    CONSTRAINT `sts_id` FOREIGN KEY (`sts_id`) REFERENCES `statusses` (`sts_id`) O 
N DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1 

Jetzt habe ich habe zwei Probleme:

Hier ist meine Frage:

INSERT INTO `events`(`evt_name` , `evt_description` , `evt_startdate` , `evt_enddate` , `evt_starttime` , `evt_endtime` , `evt_amtpersons` , `sts_id` , `adr_id` , `evt_amtPersonsSubs` , `evt_photo` , `sys-mut-user` , `sys-mut-id`) VALUES ('asf' , 'asf' , '2009-04-02' , '2009-04-22' , '00:00:00' , '00:00:00' , '3' , '1' , '' , '' , '' , 'test' , '1') 
  1. Wenn ich diese Abfrage ausführen, durch Meine PHP-Programme bekomme ich keinen Fehler. Aber wenn ich die Abfrage in einer Shell direkt auf der MySQL-Datenbank ausführen, bekomme ich zwei Warnungen. Wie kann ich PHP dazu bringen, mich zu warnen, wenn es Warnungen gibt, weil mysql die Einfügung nicht durchführt, wenn es Warnungen gibt.

  2. Über die Warnungen:

| Warnung | 1366 | Falscher Integer-Wert: '' für Spalte 'adr_id' in Zeile 1 | Warnung | 1366 | Falscher ganzzahliger Wert: '' für Spalte 'evt_amtPersonsSubs' eine Zeile 1

Wie kann ich diese Warnungen loswerden. Versucht, einige Änderungen vorzunehmen, aber es hat bisher nicht geklappt.

Antwort

5

Sie fügen eine leere Zeichenfolge ein. Sie sollten das '' entfernen und eine Zahl in dieses Feld eingeben

Wie Sie sagten, muss die Spalte nicht einen Wert angegeben haben, wenn Sie einfügen. Die Tatsache wird durch die "DEFAULT NULL" für diese Spalte bei der Tabellenerstellung angezeigt. Diese Tatsache bedeutet jedoch, dass wenn Sie tunnicht geben Sie den Spaltennamen in Ihrer Liste der Spalten beim Ausführen von INSERT (und deshalb werden Sie nicht den entsprechenden Wert entweder angeben), dann kann das Tupel eingefügt werden, und für Diesen Spaltenwert erhalten Sie automatisch automatisch als NULL.

In Ihrer Abfrage geben Sie jedoch an, dass Sie diesen Spaltenwert einfügen werden, und der Spaltenwert, den Sie sagen, ist '' (eine leere Zeichenfolge). Dies ist natürlich nicht gültig, da diese Spalte Integer akzeptiert (oder NULL, weil Sie die Spalte NOT NULL deklariert haben), und eine leere Zeichenfolge ist eine leere Zeichenfolge, keine Ganzzahl.

Der SQL-Server ist großzügig und akzeptiert die leere Zeichenfolge sowieso (wahrscheinlich wird es auf Null konvertiert), aber meldet Ihnen eine Warnung. Wenn Sie einen strikten Modus für den Server festlegen (etwas, von dem ich Ihnen dringend rate), erhalten Sie einen Fehler und die Einfügung schlägt fehl.

Bitte beachten Sie, dass, wenn Sie meinem Vorschlag der Einstellung strikten Modus folgen, dies serverweit ist und alle Ihre Datenbanken und alle Ihre Tabellen einbezieht (zumindest mit dem vor einem Jahr veröffentlichten MySQL). Wenn Sie eine Software geschrieben haben, die einen fehlerverzeihenden Server benötigt, können Sie sie nicht verwenden.

2

Die Fehlermeldung teilt Ihnen mit, dass die leere Zeichenfolge ('') kein gültiger Wert für ein ganzzahliges Feld ist - in diesem Fall die Felder adr_id und evt_amtPersonsSubs. Wolltest du stattdessen NULL setzen?

In PHP können Sie die Fehler- oder Warnmeldung nur für die letzte Abfrage mit der Funktion mysql_error() abrufen.

1

'' ist keine Ganzzahl .... Wie wäre es mit NULL in der Abfrage, wenn Sie eigentlich einen Nullwert wollen?

1

Die Warnungen weisen darauf hin, dass Sie versuchen, einen Zeichenfolgenwert in eine Ganzzahlspalte einzufügen.

In allen Orten, wo Sie eine Int-Spalte haben, müssen Sie nicht den Wert zwischen setzen ", sondern nur den Wert setzen, wie

ist

[...] 00.00.00' , '00: 00 : 00 ', 3, 1, [...]

Wenn Sie für eine bestimmte Spalte keinen Wert angeben möchten, sollten Sie die Spalte mit NULL definieren. Dann können Sie sogar Ihre '' für den Einsatz lassen.

ABER

Im Allgemeinen ist es eine schlechte Praxis Einsätze wie das zu tun. Was, wenn Sie eines Tages eine Spalte zu Ihrem Tisch hinzufügen müssen? Dann müssen Sie Ihren Code auch neu schreiben.

Deshalb sollten Sie Einsätze wie das tun:

INSERT INTO tbl_name (col1, col2) VALUES(value1, value2); 

Auf diese Weise Ihren Code noch funktioniert, auch wenn Sie Spalten hinzufügen entscheiden. Plus der Code ist einfacher zu lesen !!

0

Implicit Standardwerte sind wie folgt definiert:

  • Für numerische Typen, die Standardeinstellung ist 0, mit der Ausnahme, dass die für die ganze oder Gleitkommatypen mit dem AUTO_INCREMENT Attribute erklärte, ist der Standard nächster Wert in der Sequenz.

Referenz: