bituniverse.com Foren-Übersicht bituniverse.com
Entwickler Forum
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Datensatz kopieren
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    bituniverse.com Foren-Übersicht -> Datenbanken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Gast






BeitragVerfasst am: Fr 15 Mai, 2009 22:16    Titel: Datensatz kopieren Antworten mit Zitat

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 Wink

Nach oben
Simon W.
Anti-verdenglischungs-Abgeordneter


Anmeldedatum: 05.11.2007
Beiträge: 283
Wohnort: Aachen

BeitragVerfasst am: Fr 15 Mai, 2009 23:18    Titel: Antworten mit Zitat

Hallo Gast, wie sehen denn die relevanten Script-Zeilen aus?

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Slava
Administrator


Anmeldedatum: 16.01.2007
Beiträge: 282
Wohnort: Köln

BeitragVerfasst am: So 17 Mai, 2009 14:47    Titel: Re: Datensatz kopieren Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
M



Anmeldedatum: 05.11.2007
Beiträge: 107
Wohnort: Aachen

BeitragVerfasst am: Di 19 Mai, 2009 18:37    Titel: Antworten mit Zitat

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:
  1. $value = mysql_result($result, 0, "spalte");
  2. ...
  3. 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? Smile

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Slava
Administrator


Anmeldedatum: 16.01.2007
Beiträge: 282
Wohnort: Köln

BeitragVerfasst am: Di 19 Mai, 2009 21:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
M



Anmeldedatum: 05.11.2007
Beiträge: 107
Wohnort: Aachen

BeitragVerfasst am: Mi 20 Mai, 2009 00:48    Titel: Antworten mit Zitat

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:
  1. `con` decimal(7,0) DEFAULT NULL

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Slava
Administrator


Anmeldedatum: 16.01.2007
Beiträge: 282
Wohnort: Köln

BeitragVerfasst am: Mi 20 Mai, 2009 08:54    Titel: Antworten mit Zitat

if(empty($value) || $value=='NULL' ||$value=='null'){
$value='NULL';
}else{
$value=intval($value);
}

mysql_query("INSERT INTO tabelle (spalte) VALUES ({$value})", $con);

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
M



Anmeldedatum: 05.11.2007
Beiträge: 107
Wohnort: Aachen

BeitragVerfasst am: Mi 20 Mai, 2009 18:36    Titel: Antworten mit Zitat

Hmm, gibts keine andere Möglichkeit? Also doch das ganze Script ummodeln...hmm...ok. Ach, ich hasse fremde Scripts Rolling Eyes

Danke euch Smile

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Simon W.
Anti-verdenglischungs-Abgeordneter


Anmeldedatum: 05.11.2007
Beiträge: 283
Wohnort: Aachen

BeitragVerfasst am: Mi 20 Mai, 2009 22:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
M



Anmeldedatum: 05.11.2007
Beiträge: 107
Wohnort: Aachen

BeitragVerfasst am: Di 02 Jun, 2009 22:52    Titel: Antworten mit Zitat

Ja, aber es funktioniert nicht. Ich habe da ja dann sowas stehen wie
Code:
  1. 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 Wink

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    bituniverse.com Foren-Übersicht -> Datenbanken Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB2.de
Powered by WebRing.