Double-Opt-In Seite zeigt einen Fehler 500

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
MarioH
Regular
Posts: 253
Joined: Mon Jul 20, 2009 10:53 pm
Contact:

Double-Opt-In Seite zeigt einen Fehler 500

Post by MarioH »

Hallo,
bei meinem Blog wirft der Link zum Double-Opt-In einen 500er Fehler.

Bei eingeschaltetem Debugging kommt folgendes:

Code: Select all

== ERROR-REPORT (DEBUGGING ENABLED) ==
== (When you copy this debug output to a forum or other places, make sure to remove your username/passwords, as they may be contained within function calls) ==

#0 /homepages/41/d26790088/htdocs/serendipity/include/compat.inc.php(233): errorToExceptionHandler(1, 'Uncaught mysqli...', '/homepages/41/d...', 68)
#1 [internal function]: fatalErrorShutdownHandler()

Fatal Error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'integer) < (1744280862)' at line 2 in /homepages/41/d26790088/htdocs/serendipity/include/db/mysqli.inc.php:68 Stack trace: #0 /homepages/41/d26790088/htdocs/serendipity/include/db/mysqli.inc.php(68): mysqli_query() #1 /homepages/41/d26790088/htdocs/serendipity/include/functions_comments.inc.php(975): serendipity_db_query() #2 /homepages/41/d26790088/htdocs/serendipity/comment.php(41): serendipity_commentSubscriptionConfirm() #3 {main} thrown in /homepages/41/d26790088/htdocs/serendipity/include/db/mysqli.inc.php on line 68.
Ich habe eine MySQL 5.7 Datenbank.

Gruß
Mario
onli
Regular
Posts: 2903
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Double-Opt-In Seite zeigt einen Fehler 500

Post by onli »

Lass dir am besten mal das SQL ausgeben, der stacktrace zeigt wo es gebaut wird. Evrl musst du dafür vor dem query mit exit das Skript beenden, damit es auch angezeigt wird, oder du schrejbst es in eine Datei.

(Bin gerade etwas gebunden)
onli
Regular
Posts: 2903
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Double-Opt-In Seite zeigt einen Fehler 500

Post by onli »

Okay, jetzt konnte ich auf den Code schauen. Laut der Fehlermeldung geht es um diesen Query: https://github.com/s9y/Serendipity/blob ... c.php#L975 . Samt den relevanten Zeilen oberndrüber:

Code: Select all

// Delete possible current cookie. Also delete any confirmation hashs that smell like 3-week-old, dead fish.
if (stristr($serendipity['dbType'], 'sqlite')) {
    $cast = "name";
} else {
    // Adds explicits casting for mysql, postgresql and others.
    $cast = "cast(name as integer)";
}

serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}options
                                WHERE okey LIKE 'commentsub_%' AND $cast < (" . (time() - 1814400) . ")");

Ich vermute, dass "cast(name as integer)" für MySQL einfach falsch ist, dort stattdessen "cast(name as SIGNED)" stehen müsste?
erAck
Regular
Posts: 252
Joined: Mon Feb 16, 2015 1:20 am

Re: Double-Opt-In Seite zeigt einen Fehler 500

Post by erAck »

Ja. MySQL kennt cast as INTEGER nicht. Siehe auch https://dev.mysql.com/doc/refman/8.4/en ... ction_cast
MarioH
Regular
Posts: 253
Joined: Mon Jul 20, 2009 10:53 pm
Contact:

Re: Double-Opt-In Seite zeigt einen Fehler 500

Post by MarioH »

Ich habe den Code in meinem Blog umgeschrieben, jetzt funktioniert das Abonnement wieder.

Also muss da wahrscheinlich eine Abfrage drum, welche MySQL-Variante benutzt wird?

Und diese beiden Stellen sind dann wahrscheinlich auch betroffen:

Code: Select all

./functions_config.inc.php:455:        $cast = "cast(okey as integer)";
./functions_config.inc.php:483:        $cast = "cast(okey as integer)";
Gruß
Mario
erAck
Regular
Posts: 252
Joined: Mon Feb 16, 2015 1:20 am

Re: Double-Opt-In Seite zeigt einen Fehler 500

Post by erAck »

Also muss da wahrscheinlich eine Abfrage drum, welche MySQL-Variante benutzt wird?
Leider ja. MySQL kennt INTEGER nicht, MariaDB kennt beides INTEGER und SIGNED, PostgreSQL kennt anscheinend SIGNED nicht, SQLite auch nicht.
MarioH
Regular
Posts: 253
Joined: Mon Jul 20, 2009 10:53 pm
Contact:

Re: Double-Opt-In Seite zeigt einen Fehler 500

Post by MarioH »

Für Sqlite gibt es schon eine Abfrage.
onli
Regular
Posts: 2903
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Double-Opt-In Seite zeigt einen Fehler 500

Post by onli »

Genau, wir müssten die Abfrage für SQLite erweitern uns ein if für MySQL dazunehmen, oder zu einem case/switch umwandeln. Machst du einen PR auf? :)
MarioH
Regular
Posts: 253
Joined: Mon Jul 20, 2009 10:53 pm
Contact:

Re: Double-Opt-In Seite zeigt einen Fehler 500

Post by MarioH »

Der Code hat sich seid der 2.5 geändert, ich habe die Änderung in die db.inc.php eingebaut und einen PR gemacht.
onli
Regular
Posts: 2903
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Double-Opt-In Seite zeigt einen Fehler 500

Post by onli »

Super! Ich habe den PR direkt gemerged.
Post Reply