2017-11-29 5 views
0

Ich möchte eine Tabelle als review mit einigen von Default, wie in den folgenden Code genannt erstellen:Tabelle nicht werden mit Standardwerten erstellt

mysqli_query($link, "CREATE TABLE IF NOT EXISTS `review` (
      `clients_id` int(15) NOT NULL AUTO_INCREMENT, 
      `client_id` varchar(150) NOT NULL DEFAULT '', 
      `rating` tinyint(2) NOT NULL DEFAULT '0', 
      `proj_date` date NOT NULL DEFAULT '0000-00-00', 
      `proj_desc` text NOT NULL DEFAULT '', 
      `photoname` text NOT NULL, 
      `companyname` text NOT NULL, 
      `feedback` text NOT NULL, 
      `status` tinyint(1) NOT NULL DEFAULT '0', 
      `emailid` varchar(100) NOT NULL DEFAULT '', 
      `customratings` varchar(100) NOT NULL DEFAULT '', 
      `photo_option` varchar(100) NOT NULL DEFAULT '', 
      `title` varchar(100) NOT NULL DEFAULT '', 
      `citation` varchar(100) NOT NULL DEFAULT '', 
      `date_option` varchar(100) NOT NULL DEFAULT '', 
      `rating_option` varchar(100) NOT NULL DEFAULT '', 
      PRIMARY KEY (`clients_id`), 
      FULLTEXT KEY `feedback` (`feedback`) 
      ) ENGINE=MyISAM AUTO_INCREMENT=1") or mysqli_error($link); 

Spalten dieser Tabelle sollten DEFAULT-Werte enthalten, aber wenn schreiben Standard Die Wertetabelle wird nicht erstellt.

Nun ersetzen ich meinen Code durch DEFAULT-Werte zu entfernen mit folgenden:

mysqli_query($link, "CREATE TABLE IF NOT EXISTS `review` (
     `clients_id` int(15) NOT NULL AUTO_INCREMENT, 
     `client_id` varchar(150) NOT NULL, 
     `rating` tinyint(2) NOT NULL, 
     `proj_date` date NOT NULL, 
     `proj_desc` text NOT NULL, 
     `photoname` text NOT NULL, 
     `companyname` text NOT NULL, 
     `feedback` text NOT NULL, 
     `status` tinyint(1) NOT NULL, 
     `emailid` varchar(100) NOT NULL, 
     `customratings` varchar(100) NOT NULL, 
     `photo_option` varchar(100) NOT NULL, 
     `title` varchar(100) NOT NULL, 
     `citation` varchar(100) NOT NULL, 
     `date_option` varchar(100) NOT NULL, 
     `rating_option` varchar(100) NOT NULL, 
     PRIMARY KEY (`clients_id`), 
     FULLTEXT KEY `feedback` (`feedback`) 
     ) ENGINE=MyISAM AUTO_INCREMENT=1") or mysqli_error($link); 

Jetzt wird Tabelle perfekt zu schaffen, und wenn mit diesem weiterhin (ohne Ausfälle) Tabelle I 1364 MySQL error bin immer während Einfügen von Daten

ich vorübergehend dieses Problem behoben mit mysql error 1364 Field doesn't have a default values von STRICT_TRANS_TABLES meiner sqlmode Einstellung in phpMyAdmin

ich habe auch versucht Erstellen der Tabelle und dann Standard-ADD, um es zu entfernen, indem sie ALTER TABLE aber das könnte nur einmal gemacht werden und nicht für lange Datenbank.

Aber ich möchte nicht meine phpmyadmin Einstellung ändern und Tabelle mit DEFAULT Spalte Werte erstellen. Wie kann ich das machen und wo ich falsch mache?

Dank

Nawaz Ghori

+0

Standardwert der leeren Zeichenfolge möglicherweise nicht zulässig – serakfalcon

+0

Ein Tipp ist, versuchen Sie, die SQL in etwas wie phpmyadmin ausführen, dies wird Ihnen Fehler anzeigen und können Sie verschiedene Dinge ausprobieren. Dann fügen Sie es in Ihren PHP-Code ein, Sie haben es funktioniert. –

Antwort

1

Es gibt ein paar Probleme mit der SQL. Die erste besteht darin, dass Sie versuchen, ein ungültiges Datum anzugeben ("0000-00-00" ist kein gültiges Datum). Auch bei Textfeldern, warum es auf den Standardwert '' eingestellt ist, können Sie keinen Standardwert für einige Feldtypen festlegen - Text ist einer davon (https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html).

SO ...

CREATE TABLE IF NOT EXISTS `review` (
      `clients_id` int(15) NOT NULL AUTO_INCREMENT, 
      `client_id` varchar(150) NOT NULL DEFAULT '', 
      `rating` tinyint(2) NOT NULL DEFAULT '0', 
      `proj_date` date NOT NULL DEFAULT '1900-01-01', 
      `proj_desc` text NOT NULL, 
      `photoname` text NOT NULL, 
      `companyname` text NOT NULL, 
      `feedback` text NOT NULL, 
      `status` tinyint(1) NOT NULL DEFAULT '0', 
      `emailid` varchar(100) NOT NULL DEFAULT '', 
      `customratings` varchar(100) NOT NULL DEFAULT '', 
      `photo_option` varchar(100) NOT NULL DEFAULT '', 
      `title` varchar(100) NOT NULL DEFAULT '', 
      `citation` varchar(100) NOT NULL DEFAULT '', 
      `date_option` varchar(100) NOT NULL DEFAULT '', 
      `rating_option` varchar(100) NOT NULL DEFAULT '', 
      PRIMARY KEY (`clients_id`), 
      FULLTEXT KEY `feedback` (`feedback`) 
      ) ENGINE=MyISAM AUTO_INCREMENT=1 

funktioniert.

ABER - Sie möchten vielleicht ein bestimmtes Datum für proj_date festlegen.

+0

Danke für's Bemerken !! ..Es war dumm, ich mache einfache Fehler –

1

es zu speichern ist nicht in die Datenbank auf jeden Fall, weil das Feld column_name (und vielleicht einige andere) als "NOT NULL" aktiviert ist. Es bedeutet, dass der Wert dieses Feldes etwas anderes als NULL (NULL - keine Daten überhaupt) sein muss

Es heißt, Sie haben 2 Möglichkeiten:

Markieren Sie Ihr Feld als NULL (zuerst prüfen, ob Ihr Feld ist erforderlich einen Wert haben oder nicht).

ALTER TABLE your_table CHANGE COLUMN your_field your_field VARCHAR(250) NULL; Fügen Sie dem Feld einen Standardwert hinzu. Wenn keine Daten für eine Einfügung bereitgestellt werden, wird ein von Ihnen definiertes Element eingefügt. Zum Beispiel:

ALTER TABLE your_table CHANGE COLUMN your_field your_field VARCHAR(250) NOT NULL DEFAULT 'some_default_value';

Und natürlich entsprechen Ihren Feldtyp auf das Feld, das Sie ändern wollen.

0

eines des Problems könnte sein, dass Sie mit dem ersten Block haben, ist:

`rating` tinyint(2) NOT NULL DEFAULT '0', 
.... 
`status` tinyint(1) NOT NULL DEFAULT '0', 

statt, müssen Sie 0 ohne Angebot haben:

............................ DEFAULT 0, 

auch, sind Standardwerte nicht gesetzt Legen Sie für einige der Spalten auch die Standardeinstellungen fest.

Verwandte Themen