Drücke „Enter”, um zum Inhalt zu springen.

Bugfix phpMyAdmin: Notice in ./libraries/dbi/DBIMysqli.class.php#522

Manuel 0

Seit MySQL 5.7 bzw. MariaDB 10.2 gibt es die Möglichkeit, Felder des Typs JSON zu definieren. Das hat den Vorteil, dass man z.B. komplexere Arrays im JSON Format mit einer Konfiguration ablegen kann ohne Konstrukte mit serialize und unserialize bauen zu müssen in PHP.

Wie es so mit neuen Features ist, funktioniert nicht immer alles reibungslos bzw. muss erst implementiert werden in Software, in welcher die verwendet werden sollen. An dem Punkt „stößt“ dann auch phpMyAdmin auf das Feature und hat ein Problem damit. So kommen alle Versionen vor 4.6.0 nicht mit dem Feldtyp zurecht. Aber auch ab Version 4.6.0 läuft es noch nicht rund, wenn man eine Tabelle aufruft die ein Feld diesen Typs beinhaltet.

phpMyAdmin Fehler
Fehler bei Aufruf einer Tabelle mit Feldern des Types JSON

 

 

 

 

 

 

 

 

Relativ schnell findet man hierzu dann diesen Link, auf dem der Fehler behandelt wird und welche Zeilen Code angepasst werden müssen. Ich habe mal die entsprechenden Zeilen raus gezogen und hieraus ein Diff erstellt:


--- DBIMysqli.class.php.bak 2016-01-29 14:55:32.000000000 +0100
+++ DBIMysqli.class.php 2017-11-30 08:17:23.398635400 +0100
@@ -40,6 +40,10 @@
define('MYSQLI_TYPE_BIT', 16);
}

+if (! defined('MYSQLI_TYPE_JSON')) {
+ define('MYSQLI_TYPE_JSON', 245);
+}
+
// for Drizzle
if (! defined('MYSQLI_TYPE_VARCHAR')) {
define('MYSQLI_TYPE_VARCHAR', 15);
@@ -479,6 +483,7 @@
$typeAr[MYSQLI_TYPE_DECIMAL] = 'real';
$typeAr[MYSQLI_TYPE_NEWDECIMAL] = 'real';
$typeAr[MYSQLI_TYPE_BIT] = 'int';
+ $typeAr[MYSQLI_TYPE_JSON] = 'json';
$typeAr[MYSQLI_TYPE_TINY] = 'int';
$typeAr[MYSQLI_TYPE_SHORT] = 'int';
$typeAr[MYSQLI_TYPE_LONG] = 'int';

Danach läuft es ohne Probleme/Fehlermeldung!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.