WernerK: Spalten leer und doch nicht?

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

  1. 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

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
    1. 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

      1. 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

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. 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";