dedlfix: Autoincrement bei value = '' funktioniert mal und mal nicht

Beitrag lesen

Tach!

Die Client Api Version hat bei mir bislang immer sehr gut auf die MySQL Version gepasst. Was ein Zufall :D.
[...]
Sind die Server-Versionen in deinem Fall dieselben?

PHPinfo Info:
Client API version 5.5.40
PHPinfo Info:
Client API version mysqlnd 5.0.10 - 20111026 - $Id: c85105d7c6f7d70d609bb4c000257868a40840ab $

Ich hab noch etwas recherchiert. Bis vor einer Weile war es so, dass PHP seine mysql/mysqli-Funktionen mit der von MySQL bereitgestellten allgemeine Client-API hat sprechen lassen, und die haben dann mit dem jeweiligen Server die erforderlichen Daten ausgetauscht. Das war aber nicht sonderlich performant und so hat PHP von MySQL eine PHP-Extension programmiert bekommen, die direkt und ohne die MySQL-Client-API mit MySQL-Servern kommunizieren kann. Diese Extension ist direkter Teil von PHP geworden und verwendet keine Bestandteile der MySQL-Server-Software. Das heißt, dass die Versionsnummer von mysqlnd nun gar keinen Grund mehr hat, mit der Versionsnummer irgendeines Servers übereinzustimmen. (Außerdem waren MySQL-Server mit der Versionsnummer 5.0 schon vor drei Jahren am Ende ihres Lebenszyklus angekommen.) Das heißt also, wenn du PHP mit mysqlnd verwendest (und was anderes will man auch gar nicht mehr verwenden), dann kannst du von der angezeigte Versionsnummer keine Rückschlüsse mehr auf den Server vornehmen, auch keine zufälligen. Im aktuellen PHP-Code ist die Versionsnummer mit "mysqlnd 5.0.11-dev - 20120503" nur ein kleines Schrittchen vorangekommen, die MySQL-Server sind aber bei Version 5.6, gehen auf die 5.7 zu und MariaDB hat einen Versionssprung zu 10.0 (10.1 demnächst) hingelegt. (MariaDB schickt sich allem Anschein nach grad an, MySQL zu vertreiben.)

SELECT VERSION() nach dem Connect zum Server war und ist die einzig zuverlässige Versionsnummernabfrage aus PHP heraus.

Bei einer anderen Version wird gemeckert, dass der Wert des Feldes kein Integer ist - was ja auch stimmt.

Wer genau meckert denn? Ist es eine PHP-Meldung oder eine vom Server? Und warum nimmst du einen Leerstring und nicht 0 oder NULL, wenn du schon unbedingt einen Wert angeben willst?

dedlfix.