Antwort
 
Themen-Optionen
Alt 05.04.2007, 12:57 Nach oben    #1
Erfahrener Benutzer
 
Registriert seit: 12.06.2006
Beiträge: 196
Standard Bei INSERT werden alle Datensätze gelöscht?

Hi,

hab folgendes Problem.

Mit diesem Query lege ich eine neue Datenreihe an:
sql Code:
  1. INSERT INTO background_menu (`id`, `parent_id`, `name`, `href`, `title`, `show`, `order`, `desc`) VALUES(
  2.       LAST_INSERT_ID()+1,
  3.       0,
  4.       "name",
  5.       "href",
  6.       "title",
  7.       1,
  8.       5,
  9.       "Description");

Nur, irgendwie wird jedesmal der gesamte Inhalt der Tabelle "überschrieben", also gelöscht. Hab ich irgendwas vergessen?

(MySQL 5.0 via XAMPP, Werte werden per PHP übergeben)

MfG,
FloB

Geändert von Ben (05.04.2007 um 12:58 Uhr). Grund: bbCode geändert [highlight]
FloB ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.04.2007, 13:00 Nach oben    #2
 
Registriert seit: 10.11.2005
Ort: Schweiz -> Basel
Beiträge: 208
Standard

Warum lässt du die id nicht durch auto_increment in MySQL erhöhen und warum benutzt du nicht die Code-Tags?
think ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.04.2007, 13:00 Nach oben    #3
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard

Bei einem INSERT werden Daten überschrieben/gelöscht?

Warum nutzt du keinen PRIMARY KEY, sondern dieses komische Konstrukt LAST_INSERT_ID + 1?
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.04.2007, 13:21 Nach oben    #4
Erfahrener Benutzer
 
Registriert seit: 12.06.2006
Beiträge: 196
Standard

Ja, ich wusst nich, wie ich das machen soll. ID ist bereits ein PrimaryKey, aber in der MySQL-Doku stand nichts, dass man ID auch rauslassen könnte.

Ich hatte es versucht, einfach ID rauszulassen (also von MySQL automatisch besetzen zu lassen), dann war aber nachher die Tabelle auch wieder leer ... also hab ich die wieder reingenommen.

Ich mach das alles lokal, der Query wird von einem PHP-Script ausgeführt, die Ergebnisse schau ich mir im MySQL Query Browser an.


Hier der entsprechende Ausschnitt aus der PHP-Datei (ich wollts vorher nich rein machen, wär ja falscher Bereich
PHP-Code:
  // new entry
  
$error 0;
  foreach(
$save as $key => $val) {
    if(
$key != 'desc' || $val === ''$error += 1;
  }
  if(
$error 1) {
    
$pid = (int)$save['pid'];
    
$name mysql_real_escape_string(htmlentities($save['name'], ENT_QUOTES));
    
$href mysql_real_escape_string(htmlentities($save['href'], ENT_QUOTES));
    
$title mysql_real_escape_string(htmlentities($save['title'], ENT_QUOTES));
    
$show = (int)$save['show'];
    
$order = (int)$save['order'];
    
$desc mysql_real_escape_string(htmlentities($save['desc'], ENT_QUOTES));
    
mysql_query('INSERT INTO background_menu (`id`, `parent_id`, `name`, `href`, `title`, `show`, `order`, `desc`) VALUES(
      LAST_INSERT_ID()+1,
      '
.$pid.', 
      "'
.$name.'", 
      "'
.$href.'", 
      "'
.$title.'", 
      '
.$show.', 
      '
.$order.', 
      "'
.$desc.'");') or 
    die(
'Internal Error: [SQL:'.mysql_errno($link).'] '.mysql_error($link));
  } 
Bisschen unsauber, ich weiß ..

Aber grad beim durchschauen hab ich glaub ich das Problem entdeckt, liegt etwas höher im Code .



Und zu den Tags: Jetz weiß ich endlich wie die gehen ; [highlight=sql] Sagt mir ja keiner
FloB ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.04.2007, 15:20 Nach oben    #5
Gabriel
 
Registriert seit: 27.09.2006
Ort: Radebeul
Beiträge: 406
Standard

Aber warum nutzt du nicht das auto_increment von MySQL ?
da kannste dann einfach
statt:
LAST_INSERT_ID()+1
einfach:
''
schreiben
kampfgnom ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.04.2007, 15:36 Nach oben    #6
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.203
Standard

Oder noch einfach dann die Spalte einfach komplett weglassen. Die füllt mysql schon auf!
Dann aber auch in der Liste der Spalten weglassen.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.04.2007, 15:51 Nach oben    #7
Erfahrener Benutzer
 
Registriert seit: 12.06.2006
Beiträge: 196
Standard

OK, werds jetzt so machen, war mir nicht klar, dass das so geht .. Danke!
FloB ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.06.2007, 23:41 Nach oben    #8
Benutzer
 
Registriert seit: 11.06.2005
Beiträge: 36
Standard

Hallo,
warum kann ein Insert-Statement eigentlich
einen Datensatz ändern/löschen??
Die Logik ist mir nicht ganz klar.

mfG
rath ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.06.2007, 08:51 Nach oben    #9
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard

Auch, wenn der Thread schon älter ist ...
Zitat:
Zitat von Ben Beitrag anzeigen
Bei einem INSERT werden Daten überschrieben/gelöscht?
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.06.2007, 10:27 Nach oben    #10
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Da ich gerade 5 Minuten gebraucht habe um Bens Antwort zu raffen, mach ichs mal etwas ausführlicher:
INSERT kann weder Datensätze ändern noch löschen. Es fügt Daten hinzu. Bei einem schlechten Datenbankdesign kann es allerdings dazu kommen, dass im Frontend falsche Daten ankommen. Also wenn z.B. der Primary Key nicht als solches definiert wurde und dadurch doppelte Einträge entstanden sind. Dadurch könnte es zu falschen Datenausgaben kommen. Das ist aber ein Datenbankdesignproblem und kein Fehler bei INSERT an sich.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.06.2007, 10:48 Nach oben    #11
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 826
Standard

Da finde ich 5 Minuten aber ziemlich kurz, um das aus dem Posting von Ben herauszulesen. Ich glaube, ich hätte Stunden, Tage, Monate, Jahre gebraucht. *duck*

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.06.2007, 11:06 Nach oben    #12
Benutzer
 
Benutzerbild von xabbuh
 
Registriert seit: 03.12.2005
Ort: Osnabrück
Beiträge: 75
Standard

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
INSERT kann weder Datensätze ändern noch löschen.
Wenn man ON DUPLICATE KEY UPDATE in die Bewertung mit einbezieht, stimmt das allerdings auch nicht ganz.

Auf den oben geschilderten Fall trifft das natürlich nicht zu.

Gruß
Christian
__________________
"Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, der wird am Ende beides verlieren" (Benjamin Franklin)
xabbuh ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.06.2007, 11:21 Nach oben    #13
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Zitat:
Wenn man ON DUPLICATE KEY UPDATE in die Bewertung mit einbezieht, stimmt das allerdings auch nicht ganz.
Da gebe ich dir durchaus recht, allerdings habe ich es in der Praxis noch nie erlebt, dass dies genutzt wurde.
Ich halte diese Art und Weise des INSERTs auch für äußerst gefährlich in Bezug auf Datenintegrität.
Bin für Anwendungsbeispiele offen, wenn du da einen kennst, bin bereit zu lernen
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.06.2007, 11:47 Nach oben    #14
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 826
Standard

Ist doch eine chice Möglichkeit:

PHP-Code:
<?php

$Address 
= new Address($Request->get('address'));

if (
$AddressIsValid()) {

    
$Address->save();
    return new 
Redirect('success');

} else {

    return new 
View('form');
}
Spart dir eben die Unterscheidung.

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[MySQL] INSERT mit Wert aus einer Liste... WarrenFaith Datenbanken 6 16.05.2007 16:58
[MySQL] Was macht INSERT IGNORE/INSERT DELAYED, Anwendungsbeispiele Ben Datenbanken 7 05.02.2007 18:23
358 inaktive User gelöscht Ben Ankündigungen 0 31.12.2006 12:21
Textarea mit auto Zeilenumbruch bei INSERT Jan Datenbanken 2 01.04.2006 13:48
PRoblem mit Cookie bei PHPbb-Board Julied64 PHP-Programmierung 2 12.12.2005 15:41


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:48 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44