Hallo Verzweifelnder,
Sieht man daraus, wieso die ID ein mal als String kommt und ein mal als Integer?
Ja. Mit etwas Studium einer Quelle, die jeder PHP Programmierer auswendig lernen sollte, die aber vermutlich die wenigsten lesen.
In PHP 8.1 incompatible changes / PHP Data Objects / MySQL Driver wird dargestellt, dass genau diese Änderung mit PHP 8.1 hinein gekommen ist.
Dort steht auch ein möglicher Workaround, um die Rückwärtskompatibilität zu behalten. Der Schalter ATTR_STRINGIFY_FETCHES ist schon ewig drin, vermutlich um das Verhalten von MYSQL auch für andere DBs nachzubilden. Das kriege ich jetzt nicht mehr historisch aufgedröselt.
Oder Du hebst das PHP in deinem XAMPP auf 8.1 an und passt deinen Code entsprechend an.
Aus anderen Kommentaren entnehme ich, dass das wohl über Jahre ein Problem des MYSQL Treibers gewesen ist, der hat nie getypte Werte geliefert, immer nur Strings. Andere Datenbanken hatten früher schon getypte Werte. Und jetzt auf einmal ändert sich das - vermutlich mit der Abschaffung von libmysql und der Umstellung auf mysqlnd.
Meine persönliche Ansicht: Diese Änderung hätte niemals per Default erfolgen dürfen - man hätte einen Schalter einfügen müssen um sie zu aktivieren. Mit einer Notice, dass man in einem Kompatibilitätsmodus läuft. Die irgendwann zur Warnung wird. Wie sie es auch sonst machen.
Rolf
sumpsi - posui - obstruxi