Spalten leer und doch nicht?
WernerK
- datenbank
Hallo,
ich habe eine MySQL Tabelle "project"
Es gibt die Spalten "ProjectDir" und "ProjectName"
Über ein Forumlar kann man einen Namen und ein Pfad angeben die dann in der Tabelle gespeichert werden.
$sqlchkproject = $DBO->query("SELECT ProjectDir FROM project") ;
$foundproject = $sqlchkproject->fetch(PDO::FETCH_ASSOC);
if(!$foundproject){
//mache insert
}else{
//mache update
}
Das Script sprint jetzt immer in den Else Zweig zum update obwohl die Tabelle augenscheinlich nichts enthält.
Wenn ich mir die Tabelle mit PhpMyAdmin anzeige und auf "browse" klicke kommt immer ein Result
Showing rows 0 - 0 (1 total, Query took 0.0007 sec)
Wenn ich die Zeilen editiere ohne reingehe sind aber keine Leerzeichen drin.
Ich vermute dass event. Sonderzeichen oder Steuerzeichen drin sind die man nicht sieht?
Wie könnte man hier die Prüfung aber dann anders gestalten?
Mit if(!$foundproject){ klappt es ja so nicht?
Gruss
Werner
Yerf!
Wie könnte man hier die Prüfung aber dann anders gestalten?
Mit if(!$foundproject){ klappt es ja so nicht?
Wie die Prüfung genau aussehen muss kann ich nicht sgaen, aber derzeit Prüfst du nur, ob das Stament erfolgreich war. Ein Select der 0 Zeilen liefert war aber erfolgreich (d.h. kein Fehler).
Du musst prüfen, wieviele Zeilen zurückgeliefert wurden.
Gruß,
Harlequin
Hallo Harlequin,
eigentlich stimmt ja die Abfrage bzw. das ergebnis denn es wurde ja was gefunden. Also sollte kein Insert gemacht werden.
Mein Problem ist aber nun das der Update so auch nicht geht.
$sqlproject = "UPDATE project SET ProjectDir='$new2', ProjectName='$new1' WHERE ProjectDir != ''";
Denn "ProjectDir ist ja nicht leer.
Also wird weder beim Insert was gemacht noch ein Update?
Wie könnte man die WHERE Klausel erweitern oder ändern?
Ich möchte ja immer nur eine Zeile in der Tabelle haben
Gruss
Werner
Hi,
eigentlich stimmt ja die Abfrage bzw. das ergebnis denn es wurde ja was gefunden.
das sagt Dein Code nicht aus.
Mein Problem ist aber nun das der Update so auch nicht geht.
[...]
Denn "ProjectDir ist ja nicht leer.
Auch dies kann Deinem Code nicht entnommen werden.
Ich möchte ja immer nur eine Zeile in der Tabelle haben
Dann fängst Du mit einem Unique-Constraint an, lässt Deine komische Selektion komplett weg, machst ein Insert und nur dann ein Update, wenn das Insert fehlschlägt. Oh Wunder, der SQL-Dialekt von MySQL sieht diesen Fall beim INSERT-Statement sogar vor - siehe Dokumentation.
Cheatah
echo $begrüßung;
Das Script sprint jetzt immer in den Else Zweig zum update obwohl die Tabelle augenscheinlich nichts enthält.
Wie immer, wenn Wunsch und Wirklichkeit nicht übereinstimmt: Mach Kontrollausgaben! In dem Fall: Was gibt var_dump($foundproject) aus? Vergleiche diese Ausgabe mit der laut Handbuch beschriebenen Funktionsweise.
Wenn ich mir die Tabelle mit PhpMyAdmin anzeige und auf "browse" klicke kommt immer ein Result
Showing rows 0 - 0 (1 total, Query took 0.0007 sec)
Also liefert die Abfrage einen Datensatz zurück.
Wenn ich die Zeilen editiere ohne reingehe sind aber keine Leerzeichen drin.
Das ist für deine Art der Prüfung uninteressant. Der eine Datensatz ergibt ein erfolgreiches Fetch.
Ich vermute dass event. Sonderzeichen oder Steuerzeichen drin sind die man nicht sieht?
Das ist unerheblich. Wenn du keinen Datensatz haben willst, lösch ihn komplett und nicht nur die Feldinhalte.
echo "$verabschiedung $name";