| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Gast
|
Verfasst am: Fr 15 Mai, 2009 22:16 Titel: Datensatz kopieren |
|
|
Hallo!
Ich möchte einen Datensatz in meiner Tabelle teilweise kopieren. Also gewisse Spalten aus einem bestimmten vorhandenen Datensatz in meinem neuen wieder verwenden. Ich lese also den vorhandenen Datensatz aus, baue aus den Daten und meinem Input ein Query zusammen und will damit den neuen Datensatz eintragen. Grundsätzlich kein Problem und läuft i.d.R. auch. Probleme gibt es nur, wenn eine Spalte, die übernommen werden soll NULL enthält. In einem solchen Fall beschwert sich dann spätestens MySQL über einen ungültigen Wert, wenn ich die PHP Variable, in die ich eingelesen haben ungeprüft ins Query einbaue.
Das vorliegende Script ist nicht von mir, ich würde es daher gerne mit möglichst wenig Aufwand wieder ans korrekte Arbeiten bekommen. Muss nicht unbedingt "schön" gelöst sein 
|
|
| Nach oben |
|
 |
Simon W. Anti-verdenglischungs-Abgeordneter
Anmeldedatum: 05.11.2007 Beiträge: 283 Wohnort: Aachen
|
Verfasst am: Fr 15 Mai, 2009 23:18 Titel: |
|
|
Hallo Gast, wie sehen denn die relevanten Script-Zeilen aus?
|
|
| Nach oben |
|
 |
Slava Administrator
Anmeldedatum: 16.01.2007 Beiträge: 282 Wohnort: Köln
|
Verfasst am: So 17 Mai, 2009 14:47 Titel: Re: Datensatz kopieren |
|
|
| Anonymous hat Folgendes geschrieben: |
| In einem solchen Fall beschwert sich dann spätestens MySQL über einen ungültigen Wert, wenn ich die PHP Variable, in die ich eingelesen haben ungeprüft ins Query einbaue. |
tja, dann muss man wohl eingelesene Variable überprüfen.
Jetzt muss man klären, was du bei der Überprüfung haben willst?
Ah so, die MySQL-Fehlermeldung ist eigentlich auch von Bedeutung
|
|
| Nach oben |
|
 |
M
Anmeldedatum: 05.11.2007 Beiträge: 107 Wohnort: Aachen
|
Verfasst am: Di 19 Mai, 2009 18:37 Titel: |
|
|
Ja, überprüfen ist ja das naheliegenste, aber ich suche halt nach einer möglichst einfachen Lösung, um möglichst wenig an dem Script ändern zu müssen, da es wie gesagt nicht meines ist.
Der Code hat dieses Schema:
| Code: |
$value = mysql_result($result, 0, "spalte");
...
mysql_query("INSERT INTO tabelle (spalte) VALUES ('$value')", $con);
|
Wenn der Wert aus derm ursprünglichen Datensatz NULL ist, dann wird daraus INSERT INTO tabelle (spalte) VALUES (''). Das führt dann zu der MySQL Fehlermeldung: Incorrect integer value: '' for column 'spalte'
Reicht es vielleicht schon die '' zu entfernen? 
|
|
| Nach oben |
|
 |
Slava Administrator
Anmeldedatum: 16.01.2007 Beiträge: 282 Wohnort: Köln
|
Verfasst am: Di 19 Mai, 2009 21:23 Titel: |
|
|
| M hat Folgendes geschrieben: |
| Reicht es vielleicht schon die '' zu entfernen? |
Ich muss alles über die spalte wissen
bitte kopiere alles was zu diser spalte gehört über "show create table deine-tabelle" oder "show fielsd from tabellenname"
Ich muss type von spalte wissen,ob sie ein null haben darf
und defaultwert ist auch von bedeutung.
|
|
| Nach oben |
|
 |
M
Anmeldedatum: 05.11.2007 Beiträge: 107 Wohnort: Aachen
|
Verfasst am: Mi 20 Mai, 2009 00:48 Titel: |
|
|
Das sind alles decimal Spalten mit verschiedener Größe und Default Wert NULL. Und das sie NULL sein dürfen ist je genau das Problem. Wenn sie dann NULL sind, kommt es zu dem Problem beim übertragen.
| Code: |
`con` decimal(7,0) DEFAULT NULL
|
|
|
| Nach oben |
|
 |
Slava Administrator
Anmeldedatum: 16.01.2007 Beiträge: 282 Wohnort: Köln
|
Verfasst am: Mi 20 Mai, 2009 08:54 Titel: |
|
|
if(empty($value) || $value=='NULL' ||$value=='null'){
$value='NULL';
}else{
$value=intval($value);
}
mysql_query("INSERT INTO tabelle (spalte) VALUES ({$value})", $con);
|
|
| Nach oben |
|
 |
M
Anmeldedatum: 05.11.2007 Beiträge: 107 Wohnort: Aachen
|
|
| Nach oben |
|
 |
Simon W. Anti-verdenglischungs-Abgeordneter
Anmeldedatum: 05.11.2007 Beiträge: 283 Wohnort: Aachen
|
Verfasst am: Mi 20 Mai, 2009 22:57 Titel: |
|
|
Wenn die Variable den leeren string enthält (wie du ja meintest: "VALUES ('')"), dann sollte man ja meinen, dass es reicht, die '' zu entfernen. (Warum sollte eine Ganzzahl auch in Hochkommata eingebettet sein?) Hast du das denn ausprobiert?
|
|
| Nach oben |
|
 |
M
Anmeldedatum: 05.11.2007 Beiträge: 107 Wohnort: Aachen
|
Verfasst am: Di 02 Jun, 2009 22:52 Titel: |
|
|
Ja, aber es funktioniert nicht. Ich habe da ja dann sowas stehen wie
| Code: |
INSERT INTO tabelle (spalte1, spalte2, spalte3) VALUES ('abcdef', ,12);
|
Aber mal ein anderer Ansatz, denn ich scheue mich immernoch davor so viel in dem fremden Script zu ändern, denn das sind eine ganze Menge Werte, für die ich dann eine solche Abfrage einbauen müsste 
Wenn die Tabelle eine gescheite auto_increment Spalte hätte, dann könnte ich den neuen Datensatz doch einfach per INSERT INTO ... SELECT ohne die id-Spalte einfügen, den letzten auto increment Wert abfragen und dann per UPDATE meine Änderungen vornehmen?
Die Spalte für die ID ist aber zur Zeit vom Typ decimal(11,0) kann sich einer von euch vorstellen, warum die Entwickler diesen Typ gewählt haben? Welche Vorteile hat er gegenüber INT oder anderen Typen, für die ich für diese Spalte ein auto increment hinzufügen kann?
|
|
| Nach oben |
|
 |
|