Hinweis: Unbekannt: Überspringt den numerischen Schlüssel 1 in Unbekannt in Zeile 0

8

Ich habe den folgenden Code:

%Vor%

Die ausgegebene Zeichenfolge (1, 17, 2, 18 ...) gibt diese Fehlermeldung aus (zehnmal mit Taste 1, Taste 2, Taste 3 usw.):

%Vor%

Als ich diesen Fehler sah, war die einzige Antwort, die ich finden konnte, dass das Anordnen eines Arrays in einem Superglobal dies verursachen würde. Ich glaube nicht, dass ich ein Array eingefügt habe, $row['Count'] ist eine Zeichenkette, oder? Ich konnte keine Einträge in Stackoverflow über diesen Fehler finden.

Was verursacht diesen Fehler, und was soll ich tun, um es zu beheben? (Der gezeigte Code ist nur ich experimentiere und plane ein Design für endlose Paginierung mit meiner Datenbank.)

    
James G. 14.09.2013, 00:56
quelle

1 Antwort

24

Der Speichermechanismus der PHP-Sitzung wurde ursprünglich um die "Registrierung" von Variablen herum aufgebaut, so dass die Schlüssel in $_SESSION Namen sein müssen, die als eigene Variablen behandelt werden können.

Dies bedeutet, dass $_SESSION[42] ungültig ist, weil kein gültiger Variablenname ist, und da $foo[42] und $foo['42'] sich auf dasselbe beziehen, ist $_SESSION['42'] ebenfalls ungültig.

Die Lösung besteht darin, ein Präfix für Ihre Sitzungsvariablen (z. B. $_SESSION['row_count_' . $x] = $row['Count']; ) zu verwenden oder sie zu einem Array zu machen, das Sie dann später usw. durchlaufen können (z. B. $_SESSION['row_counts'] = array(); ... $_SESSION['row_counts'][$x] = $row['Count']; )

Hinweis: Diese Einschränkung ist eigentlich Teil des "Serialisierungshandlers", der beim Schreiben der Sitzung auf die Festplatte verwendet wird, weshalb die Fehler keinen Kontext haben (sie werden ausgelöst, während PHP heruntergefahren wird). In sehr neuen Versionen von PHP gibt es eine Einstellung von session.serialize_handler die diese Einschränkung nicht hat:

  

php_serialize ist ab PHP 5.5.4 verfügbar. php_serialize verwendet intern die Funktion serialize / unserialize und hat keine Einschränkungen wie php und php_binary. Ältere Serialisierungshandler können keinen numerischen Index speichern, und der Zeichenfolgenindex enthält in $ _SESSION keine Sonderzeichen (| und!). Verwenden Sie php_serialize, um numerische Index- oder Sonderzeichenfehler beim Herunterfahren des Skripts zu vermeiden.

    
IMSoP 14.09.2013, 01:20
quelle

Tags und Links