MySQL Insert mit Null

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • MySQL Insert mit Null

    Hallo!

    Erstmal zu meiner DB Spalte

    Quellcode

    1. `read_position` varchar(255) COLLATE utf8_bin DEFAULT NULL,


    Beim Absende des Beitrages prüfe ich ob [read_more] im Beitrag vorkommt, schreibe die Position in diese Spalte und bei der Ausgabe des Beitrages kürzt er an dieser Position und fügt einen Weiterlesen Link ein. Dies funktioniert soweit.

    Wenn jetzt aber kein [read_more] im Beitrag vorkommt, spuckt er mir die Fehlermeldung

    Warning: substr() expects parameter 3 to be long, string given in C:\server\htdocs\article\class\class_article.php on line 31


    aus.
    Zeile 31 ist diese

    PHP-Quellcode

    1. 'POST_TEXT' => (isset($row['read_position'])) ? substr(nl2br($row['post_text']), 0, $row['read_position']) : nl2br($row['post_text']),


    Ich vermute es liegt an dem Default NULL. Kommt kein [read_more] vor, schreibt er gar nix in die Spalte, d.h die Spalte ist leer und ich erhalte die Fehlermeldung. Setze ich das Feld Manuell auf NULL, gibt es keine Fehlermeldungen. Wie kann ich dies via PHP bewerkstelligen?

    PHP-Quellcode

    1. /*
    2. * Prüfen ob readmore gesetzt und position ermittelt
    3. * wenn ja dann Update des Posts da ein leerer Wert zu einer Fehlermeldung führt
    4. */
    5. $string = $Core->get(POST, 'post_text');
    6. $suchstring = '[read_more]';
    7. $rueckgabe_ereg = ereg($suchstring, $string);
    8. if ($rueckgabe_ereg == 1) {
    9. // Position des Weiterlesen Links ermitteln
    10. $findmich = '[read_more]';
    11. $meinstring1 = $Core->get(POST, 'post_text');
    12. $pos1 = stripos($meinstring1, $findmich);
    13. } else {
    14. $pos1 = null;
    15. }
    16. / Update der Datenbank
    17. $updateparams = array(
    18. ':post_id' => $post_id,
    19. ':read_position' => $pos1
    20. );
    21. $sql = 'UPDATE ' . BLOG_POST . ' SET read_position = :read_position WHERE post_id = :post_id LIMIT 1';
    22. $stmt = MyDB::getInstance()->prepare($sql);
    23. $stmt->execute($updateparams);
    Alles anzeigen


    Mit null oder NULL trägt er nix ein, das Feld bleibt leer. Mit "null" oder 'null' trägt er den String null ein was ebenfalls zu einer Fehlermeldung wird.
    Wie kann ich also wenn kein [read_more] im Text vorkommt den Standarfwert DEFAULT NULL beibehalten oder neu setzen?
  • Generell ist es bei MySQL kein Problem, einen Wert mit "= NULL" zu speichern.

    So wie es ausschaut, speicher er dies auch korrekt in der Datenbank.

    Der Fehler liegt jetzt im Verarbeiten der Daten. Er erwartet einen Wert in deiner Abfrage, der jedoch "NULL" ist.

    Am besten gibst du vor der Verarbeitung mal die Werte aus, um zu sehen, was da genau passiert.
    Lerne nicht Programmiersprachen, lerne Programmieren...

    :D Alles andere ist Syntax :D

    [Blockierte Grafik: http://www.xing.com/img/buttons/10_en_btn.gif]
  • So wie es ausschaut, speicher er dies auch korrekt in der Datenbank.

    Der Fehler liegt jetzt im Verarbeiten der Daten. Er erwartet einen Wert in deiner Abfrage, der jedoch "NULL" ist.
    [/quote]

    Eben nicht. Standard ist NULL in der DB. Gebe ich kein [read_more] im Text an, ist die DB Spalte leer. Kein NULL mehr drinne.
    Gebe ich [read_more] an, schreibt er die Zahl bis zur Position in die Spalte.

    PHP-Quellcode

    1. // Kein Fehler aufgetaucht?
    2. if (!isset($fehler)) {
    3. // Kategorie mehrfachauswahl?
    4. $cl_tmpl = $Core->get(POST, 'cat_id');
    5. if (!is_array($cl_tmpl)) {
    6. $cl_tmpl = array();
    7. }
    8. $cl_ugrl = array();
    9. for ($i = 0; $i < count($cl_tmpl); ++$i) {
    10. $cl_ugrl[] = intval($cl_tmpl[$i]);
    11. }
    12. $post_group = implode(',', $cl_ugrl);
    13. $pdoparams = array(
    14. ':post_subject' => $Core->get(POST, 'post_subject'),
    15. ':cat_id' => $post_group,
    16. ':poster_id' => $User->user_out('user_id'),
    17. ':post_time' => time(),
    18. ':post_username' => $User->user_out('user_nickname'),
    19. ':post_text' => $Core->get(POST, 'post_text'),
    20. );
    21. $sql = 'INSERT INTO ' . BLOG_POST . '
    22. (post_subject, cat_id, poster_id, post_time, post_username, post_text)
    23. VALUES
    24. (:post_subject, :cat_id, :poster_id, :post_time, :post_username, :post_text)';
    25. $stmt = MyDB::getInstance()->prepare($sql);
    26. $stmt->execute($pdoparams);
    27. $post_id = MyDB::getInstance()->lastInsertId();
    28. /*
    29. * Prüfen ob readmore gesetzt und position ermittelt
    30. * wenn ja dann Update des Posts da ein leerer Wert zu einer Fehlermeldung führt
    31. */
    32. $string = $Core->get(POST, 'post_text');
    33. $suchstring = '[read_more]';
    34. $rueckgabe_ereg = ereg($suchstring, $string);
    35. if ($rueckgabe_ereg == 1) {
    36. // Position des Weiterlesen Links ermitteln
    37. $findmich = '[read_more]';
    38. $meinstring1 = $Core->get(POST, 'post_text');
    39. $pos1 = stripos($meinstring1, $findmich);
    40. } else {
    41. $pos1 = null;
    42. }
    43. // Update der Datenbank
    44. $updateparams = array(
    45. ':post_id' => $post_id,
    46. ':read_position' => $pos1
    47. );
    48. $sql = 'UPDATE ' . BLOG_POST . ' SET read_position = :read_position WHERE post_id = :post_id LIMIT 1';
    49. $stmt = MyDB::getInstance()->prepare($sql);
    50. $stmt->execute($updateparams);
    51. }
    Alles anzeigen


    Das Update ganz unten soll entweder die Position eintragen oder wenn nicht gesetzt dann die DB Spalte auf NULL lassen und nicht mit einem leeren Inhalt füllen.

    Bei der Ausgabe zeigt er den Fehler in dieser Zeile an

    PHP-Quellcode

    1. 'POST_TEXT' => (isset($row['read_position'])) ? substr(nl2br($row['post_text']), 0, $row['read_position']) : nl2br($row['post_text']),


    Wert in DB 0-xxx keine Fehlermeldung
    Wert = NULL keine Fehlermeldung
    Wert = kein Inhalt in der Spalte = Fehlermeldung
    Anstatt NULL schreibt er bei dem Update garnix in die Spalte
    Bilder
    • NULL.png

      6,9 kB, 309×241, 275 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Nadin ()