Marco Kripp: NULL-Marke einfügen

Hallo!

Ich habe eine MySQL Abfrage die folgendermaßen aussieht:

UPDATE t_personaldata SET
MemberLngLat =  '".mysql_real_escape_string($userData['MemberLngLat'])."'
WHERE PersonaldataId = '".mysql_real_escape_string($userData['UserId'])."';";

Diese Abfrage ist schlecht, da ich hier aufgrund der beiden ' (Hochkommas) keine NULL-Marke einfügen kann. Weglassen kann ich die ' (Hochkommas) aber auch nicht, da $userData['MemberLngLat'], wenn nicht NULL ein , (Komma) enthält.
Wie ist die übliche vorgehensweise in diesen Fällen? Ich hatte an eine eine parametrisierte Übergabe ala
"... Set MemberLngLat = ? WHERE ..." gedacht.
Aber sowas habe ich in der MySql Referenz nicht gefunden.

Gruß
Marco

  1. Lass die ' doch über die Variable geben:

    If($userData['MemberLngLat']==NULL)
    $Wert=$userData['MemberLngLat'];
    Else
    $Wert="'".$userData['MemberLngLat']."'";

    UPDATE t_personaldata SET
    MemberLngLat =  ".mysql_real_escape_string($Wert)."
    WHERE PersonaldataId = '".mysql_real_escape_string($userData['UserId'])."';";

    So habe ich meine MySql-Probleme gerne gelöst ... :)

    MFG
    Griever

    1. Moin!

      Lass die ' doch über die Variable geben:

      Was passiert wohl, wenn einfache Anführungszeichen durch mysql_real_escape_string() geschickt werden.

      So habe ich meine MySql-Probleme gerne gelöst ... :)

      Kommt aber nur fehlerhaftes Zeugs bei raus.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
  2. Hallo

    Diese Abfrage ist schlecht, da ich hier aufgrund der beiden ' (Hochkommas) keine NULL-Marke einfügen kann. Weglassen kann ich die ' (Hochkommas) aber auch nicht, da $userData['MemberLngLat'], wenn nicht NULL ein , (Komma) enthält.

    Du kennst die if-Anweisung?
    Du kennst den ternären Operator

    ? :

    Wende eines von beiden an, um mit PHP das korrekte SQL-Statement zu erzeugen.

    Freundliche Grüße

    Vinzenz

    1. Hi!

      Du kennst den ternären Operator

      ? :

      Danke, ich dachte es gäbe vielleicht noch einen Lösungsweg den ich nicht kenne und etwas übersichtlicher ist.

      Gruß
      Marco

  3. Hi,

    UPDATE t_personaldata SET
    MemberLngLat =  '".mysql_real_escape_string($userData['MemberLngLat'])."'
    WHERE PersonaldataId = '".mysql_real_escape_string($userData['UserId'])."';";
    Diese Abfrage ist schlecht, da ich hier aufgrund der beiden ' (Hochkommas) keine NULL-Marke einfügen kann. Weglassen kann ich die ' (Hochkommas) aber auch nicht, da $userData['MemberLngLat'], wenn nicht NULL ein , (Komma) enthält.

    wenn das tatsächlich ein SQL-Statement ist, dann tritt dieses Problem niemals auf, da ".mysql_real_escape_string($userData['MemberLngLat'])." und ".mysql_real_escape_string($userData['UserId'])." niemals NULL sind, sondern immer exakt diese Werte. Dein SQL-Statement ist dann aber an mehreren Stellen defekt, z.B. ist das ;" am Ende falsch, und es fehlen Kodierungen der Singlequotes. Wenn es sich jedoch um *kein* SQL-Statement handelt, sondern um ein Fragment irgend einer anderen Programmiersprache, so hat Dein Problem nichts mit SQL zu tun, sondern mit dieser Programmiersprache - und ist trivial lösbar. Erzeuge genau das Statement, welches Du haben willst.

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

      Wenn es sich jedoch um *kein* SQL-Statement handelt, sondern um ein Fragment irgend einer anderen Programmiersprache, so hat Dein Problem nichts mit SQL zu tun, sondern mit dieser Programmiersprache - und ist trivial lösbar.

      Danke für die Polemik =). Mir ist bei C&P ein unverzeichlicher Fehler unterlaufen.
      Darüber hinaus, danke für den Lösungstipp.

      Gruß
      Marco

      1. Hi,

        Danke für die Polemik =).

        dafür bin ich immer gut ;-)

        Mir ist bei C&P ein unverzeichlicher Fehler unterlaufen.

        Und bei der Einordnung des Problems. Bemühe Dich, klar zu trennen. Wenn es ein SQL-Problem ist, hat PHP-Code darin genauso wenig zu suchen, wie bei HTML-, CSS- oder JavaScript-Problemen.

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

          Und bei der Einordnung des Problems. Bemühe Dich, klar zu trennen. Wenn es ein SQL-Problem ist, hat PHP-Code darin genauso wenig zu suchen, wie bei HTML-, CSS- oder JavaScript-Problemen.

          Verständlich. Vielleicht wäre die beste Einordnung PHP+MySQL oder PHP+SQL gewesen. IMHO gibt es diese Kategorie nicht. Ein Teil meines Ursprungspostings beruhte auf der Frage nach der Existenz einer parametrisierten Übergabe von Variablen in Mysql. Wie schon erwähnt habe ich derartiges nicht in der Referenz nicht gefunden. Das muss aber ja nicht bedeutet das es so etwas nicht in Mysql gibt.

          Gruß
          Marco

          1. Hallo

            Ein Teil meines Ursprungspostings beruhte auf der Frage nach der Existenz einer parametrisierten Übergabe von Variablen in Mysql.

            Der von MySQL unterstützte SQL-Dialekt bietet derzeit nichts derartiges. Es gibt jedoch Datenbankabstraktionsbibliotheken, die Dir diese Funktionalität auch für MySQL zur Verfügung stellen, es gibt außerdem die verbesserte MySL-Unterstützung mysqli und es gibt PDO-MySQL.

            Für Neuentwicklungen (PHP5 und neuer, MySQL 4.1 und neuer) sollte man die "normalen" MySQL-Funktionen meiner Ansicht als nicht mehr zeitgemäße Altlast betrachten und nicht mehr verwenden.

            Freundliche Grüße

            Vinzenz

            1. Hi!

              ... es gibt außerdem die verbesserte MySL-Unterstützung mysqli und es gibt PDO-MySQL.

              Danke für den Hinweis, mich stört allerdings die Warnung auf den experimentellen Stand dieser Funktionen. Nutzt du die "Verbesserte MySQL Erweiterung" uneingeschränkt?

              Grüße
              Marco

              1. echo $begrüßung;

                ... es gibt außerdem die verbesserte MySL-Unterstützung mysqli [...]

                Danke für den Hinweis, mich stört allerdings die Warnung auf den experimentellen Stand dieser Funktionen. Nutzt du die "Verbesserte MySQL Erweiterung" uneingeschränkt?

                Die deutsche Ausgabe der Handbuchseite ist mal wieder veraltet. Im Zweifelsfall sollte immer das englische Original herangezogen werden, und da ist diese Warnung schon seit geraumer Zeit nicht mehr enthalten.

                echo "$verabschiedung $name";

          2. Hi,

            Bemühe Dich, klar zu trennen.
            Verständlich. Vielleicht wäre die beste Einordnung PHP+MySQL oder PHP+SQL gewesen.

            nein. Bemühe Dich, klar zu trennen. Es ist *entweder* ein PHP-Problem, *oder* ein SQL-Problem. Nie beides.

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

              nein. Bemühe Dich, klar zu trennen. Es ist *entweder* ein PHP-Problem, *oder* ein SQL-Problem. Nie beides.

              nicht immer ist es dem hilfesuchenden klar, wie das problem nun zu lösen ist, mittels mysql oder php. für ihn sind also beide optionen möglich, bei dem der rat weiss vielleicht nur eine. grundsätzlich beinflussen sich php und mysql und stehen nicht unabhängig nebeneinander. insofern kann ich ihn gut verstehen.

              Ilja

              1. Hi,

                nein. Bemühe Dich, klar zu trennen. Es ist *entweder* ein PHP-Problem, *oder* ein SQL-Problem. Nie beides.
                nicht immer ist es dem hilfesuchenden klar, wie das problem nun zu lösen ist, mittels mysql oder php.

                dennoch kann er die beiden Techniken voneinander trennen, auch wenn er nach Lösungswegen in beiden sucht. Alles andere ist Unsinn.

                grundsätzlich beinflussen sich php und mysql und stehen nicht unabhängig nebeneinander.

                Nein, sie beeinflussen sich nicht, sondern werden miteinander verknüpft. So wie z.B. auch PHP und JavaScript.

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

                  dennoch kann er die beiden Techniken voneinander trennen, auch wenn er nach Lösungswegen in beiden sucht. Alles andere ist Unsinn.

                  ich denke, in seinem fall ist das problem so gut beschrieben worden, dass es zu keinen rückfragen kommen musste. und auch auf den inhalt der variablen in der sql-anweisung ist er eingegangen. insofern fehlt eine wenig die motivation zur kritik, bzw. der handlungsbedarf.

                  grundsätzlich beinflussen sich php und mysql und stehen nicht unabhängig nebeneinander.

                  Nein, sie beeinflussen sich nicht, sondern werden miteinander verknüpft. So wie z.B. auch PHP und JavaScript.

                  das sehe ich anders. wenn ich etwas entwickle, dann spielt das komplette umfeld eine rolle und wie sie miteinander verbunden sind. alles nur als einzelpakte zu betrachten halte ich für einen fehler.

                  Ilja

          3. Moin!

            Und bei der Einordnung des Problems. Bemühe Dich, klar zu trennen. Wenn es ein SQL-Problem ist, hat PHP-Code darin genauso wenig zu suchen, wie bei HTML-, CSS- oder JavaScript-Problemen.

            Verständlich. Vielleicht wäre die beste Einordnung PHP+MySQL oder PHP+SQL gewesen. IMHO gibt es diese Kategorie nicht.

            Du hast den Einwand nicht verstanden.

            Entweder hast du ein SQL-Problem, weil dein SQL-Query nicht das tut, was du willst. Dann ist "Datenbank" die richtige Kategorie.

            Oder du hast ein PHP-Problem, weil PHP nicht tut, was du willst - beispielsweise einen SQL-Query herstellen. Dann ist "PHP" die richtige Kategorie.

            Im ersten Fall ist für die Betrachtung ausschließlich SQL-Code relevant, im zweiten Fall ausschließlich der PHP-Code.

            Dein angenommenes Schnittstellenproblem unter der Kategorie "Mit PHP generiere ich ja SQL" mußt du trennen in "Welches SQL benötige ich" und "Wie kriege ich PHP dazu, das benötigte zu generieren.

            Ein Teil meines Ursprungspostings beruhte auf der Frage nach der Existenz einer parametrisierten Übergabe von Variablen in Mysql.

            MySQL kennt keine Variablen, jedenfalls nicht in dem Sinne, wie du es hier vermutest.

            Wenn du in deine Datenbank NULL ins Feld schreiben willst, muß der relevante SQL-Code so aussehen:

            ... SET feld = NULL ...

            Wenn du einen String ins Feld reinschreiben willst, muß der SQL-Code so aussehen:

            ... SET feld = 'feldinhalt' ...

            Das ist die SQL-Seite deines Problems.

            Jetzt kommt die PHP-Seite.

            Erstes Problem: Wie weißt du, dass du NULL in das Feld schreiben willst?

            Zweites Problem: Wie kriegst du es hin, bei dem Bedarf nach NULL den SQL-String nach Schema 1, andernfalls nach Schema 2 zusammenzubauen? Antwort: Verzweigung mit IF oder dem ternären Operator.

            Cheatah hatte lediglich extrem deutlich gemacht, dass diese Sichtweisenunterscheidung extrem hilfreich ist, das Problem zu lösen - immer schön getrennt nach Programmiersprachenbezirk, zuerst feststellen, was "innen" gebraucht wird, damit man dann das "außenrum" so gestaltet, dass es das gewünschte Innere korrekt herstellt.

            - Sven Rautenberg

            --
            "Love your nation - respect the others."
            1. yo,

              Verständlich. Vielleicht wäre die beste Einordnung PHP+MySQL oder PHP+SQL gewesen. IMHO gibt es diese Kategorie nicht.

              Du hast den Einwand nicht verstanden.

              auch für dich noch mal den hinweis, dass es für ihn nicht klar sein muss, wie man das problem nun am besten löst. grundsätzlich sollte sich das problem sowohl mit php als auch auch mit mysql lösen können. ud wenn die kombination von php und mysql eingesetzt wird, dann kann diese lösung sogar noch vareieren.

              Ilja

              1. Moin!

                Verständlich. Vielleicht wäre die beste Einordnung PHP+MySQL oder PHP+SQL gewesen. IMHO gibt es diese Kategorie nicht.

                Du hast den Einwand nicht verstanden.

                auch für dich noch mal den hinweis, dass es für ihn nicht klar sein muss, wie man das problem nun am besten löst.

                Doch, es hilft beim Verstehen des Problems und bei seiner Lösung.

                grundsätzlich sollte sich das problem sowohl mit php als auch auch mit mysql lösen können.

                Definitiv nicht. Wenn in MySQL eine NULL-Spalte genutzt werden soll, ist zwingend in SQL dort NULL einzufügen. Das kann man NUR MIT SQL machen, und dementsprechend muß PHP entsprechende Querys generieren. Man kann nicht mit SQL einfach 'NULL' in die Spalte einfügen, weil das nicht zum gleichen Ergebnis führt. PHP-seitig kann man mit keinem denkbaren Code das gleiche Ergebnis herbeiführen.

                - Sven Rautenberg

                --
                "Love your nation - respect the others."
                1. yo,

                  Definitiv nicht. Wenn in MySQL eine NULL-Spalte genutzt werden soll, ist zwingend in SQL dort NULL einzufügen. Das kann man NUR MIT SQL machen

                  das ist richtig.

                  und dementsprechend muß PHP entsprechende Querys generieren.

                  das könnte sich als falsch herrausstellen.

                  Ilja