Warnung "Eigenschaftenzugriff ist noch nicht erlaubt", wenn vorbereitete Anweisung verwendet wird

8

Ich versuche, ein System einzuloggen, indem ich AES_ENCRYPT() benutze, um mein Passwort zu verschlüsseln. Aber ich habe eine Warnung von xdebug , wenn ich versuche, diese Codes zu implementieren:

%Vor%

Wenn der Debugger Zeile 8 oder $stmt->prepare($sql); erfüllt, werden 6 gleiche Warnungstabellen von xdebug angezeigt:

  

(!) Warnung: main (): In D: \ xampp \ htdocs \ learn php \ includes \ authenticate_mysqli.inc.php in Zeile 8

ist der Zugriff auf die Eigenschaft noch nicht erlaubt

Die Fehlereigenschaft in $stmt ist leer und ich habe kein wirkliches Problem, aber ich möchte nur wissen, aus welchem ​​Grund diese Warnmeldungen angezeigt werden.

Googelte diese Warnmeldung, fand aber keine Lösung:

  1. UPDATE-Abfrage mit vorbereiteten Anweisungen
  2. Ссылка
weeix 16.09.2013, 15:32
quelle

2 Antworten

3

Ihre mysql-Verbindung wurde wahrscheinlich nicht eingerichtet. Nach mysqli::__construct() muss man mysqli::$connect_error überprüfen, was für einige PHP kaputt war Versionen:

  

Die Eigenschaft mysqli- & gt; connect_error funktioniert nur ab den PHP-Versionen 5.2.9 und 5.3.0. Verwenden Sie die Funktion mysqli_connect_error (), wenn die Kompatibilität mit früheren PHP-Versionen erforderlich ist.

Siehe die Anschluss-Kesselplatte aus der Dokumentation von mysqli::__construct() :

%Vor%     
Markus Malkusch 12.01.2014 11:49
quelle
1

EDIT: Ich glaube, das Problem, das ich unten beschreibe, ist die Ursache des Problems, das das OP beschreibt, aber da das Problem, das ich in meiner Antwort beschreibe, nicht dieselbe Fehlermeldung erzeugt, bin ich nicht mehr sicher, ob dies die beste Antwort ist .

Auch das habe ich in der PHP-Dokumentation bemerkt:

  

Dieser Parameter (und vermutlich jeder andere Parameter in mysqli_stmt)   wird einen Fehler mit der Meldung "Zugriff auf die Eigenschaft ist nicht erlaubt   aber "wenn die Aussage nicht richtig vorbereitet oder nicht vorbereitet wurde   alles.

     

Um dies zu verhindern, stellen Sie immer sicher, dass der Rückgabewert der "Vorbereitung"   Die Aussage ist wahr, bevor auf diese Eigenschaften zugegriffen wird.

Ursprüngliche Antwort: Diese Warnung tritt auf, wenn Sie versuchen, bestimmte Objekte (eine Instanz einer Klasse) als Zeichenfolge auszuwerten.

Ihr Debugger versucht, eine Ihrer Variablen ($ stmt) auszuwerten, möglicherweise in einer Watch-Liste oder einem Call-Stack, und kann nicht als String ausgewertet werden.

Wenn Sie print_r für die Variable eingeben, erhalten Sie den gleichen Fehler, weil PHP ihn nicht in eine Zeichenkette verwandeln kann.

In Ihrem Fall ist es das $ stmt, das PHP nicht in eine Zeichenkette verwandeln kann.

Setzen Sie diesen Code in Zeile 7 und Sie werden den Fehler dort sehen:

%Vor%

Eine kleine Randnotiz: Ich hatte dieses Problem nie zuvor. In letzter Zeit habe ich viel davon bekommen. Warum überspringt php nicht einfach die unzugänglichen Eigenschaften und druckt den Rest aus? Ich glaube, es hat mit dem Umfang der Eigenschaften oder der Verwendung von Getter / Setter zu tun, aber ich bin mir noch nicht ganz sicher. Ich werde aktualisieren, wenn ich diesen Teil herausfinde.

aus der offiziellen PHP-Dokumentation: ( Ссылка )

  

Die __toString () -Methode ermöglicht einer Klasse zu entscheiden, wie sie reagieren wird   wenn es wie eine Schnur behandelt wird. Zum Beispiel, welches Echo $ obj; werden   drucken. Diese Methode muss eine Zeichenfolge zurückgeben, da andernfalls ein schwerwiegender Fehler auftritt   E_RECOVERABLE_ERROR Level-Fehler wird ausgegeben ...

     

... Es ist erwähnenswert, dass vor PHP 5.2.0 die Methode __toString () existiert   wurde nur aufgerufen, wenn es direkt mit echo oder print kombiniert wurde.   Seit PHP 5.2.0 wird es in einem beliebigen String-Kontext aufgerufen (z. B. in printf ()).   mit% s Modifikator), aber nicht in anderen Typen Kontexte (z. B. mit% d   Modifikator). Seit PHP 5.2.0, Konvertieren von Objekten ohne __toString ()   Methode, um zu string, würde E_RECOVERABLE_ERROR verursachen.

    
Evan de la Cruz 04.11.2015 19:00
quelle