"Eigentum ist der Zugriff nicht erlaubt noch" Warnung bei der Verwendung von prepared Statements
Ich versuche, eine log-in-system mit AES_ENCRYPT()
enkodieren mein Passwort. Aber ich habe eine Warnung von xdebug, wenn Sie versuchen zu implementieren, die diese codes:
...
$key = 'd0gis=SUPER-cute';
$sql = "SELECT * FROM `users2` WHERE username = ? AND pwd = AES_ENCRYPT(?, ?)";
$stmt = $conn->stmt_init();
$stmt->prepare($sql);
$stmt->bind_param('sss', $username, $password, $key);
$stmt->execute();
$stmt->store_result();
...
Wenn der debugger trifft die Linie 8 oder $stmt->prepare($sql);
, 6 gleiche Warnung Tabellen aus xdebug sagt:
(!) Warning: main(): Property-Zugriff ist nicht erlaubt, doch in D:\xampp\htdocs\learnphp\includes\authenticate_mysqli.inc.php auf der Linie 8
Die error-Eigenschaft in $stmt
ist leer und ich habe echt kein problem, aber ich möchte nur wissen, welche Ursache diese Warnung Nachrichten erscheint.
Gegoogelt, diese Warnung aber nicht finden, eine Lösung:
- Warum sind Sie mit
stmt_init()
? Ich habe noch nie gesehen, dass bevor verwendet. In der Regel ist es$db->prepare(...)
direkt. - Ich Folge ein Beispiel in php.net
- Das ist seltsam, weil es ' s "andere" Dokumentation, die nahelegt, dass Sie anrufen können
prepare
direkt auf den link, den Sie haben, und ich habe immer gesehen, es geschieht auf diese Weise. - Bitte siehe meine Antwort hier: stackoverflow.com/questions/28870315/... (dupe Frage, nicht sicher, wie Sie Sie zu Kennzeichnen, als solche aber)
- vielleicht dieses: stackoverflow.com/questions/25377030/...
- Der zweite link in Ihrer Frage behauptet, die Adresse genau dieses Problem: "um dies Zu verhindern, stellen Sie immer sicher, dass der Rückgabewert von der prepare-Anweisung ist wahr, bevor Sie Zugriff auf diese Eigenschaften." php.net/manual/en/mysqli-stmt.param-count.php#89490
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre mysql-Verbindung wurde wohl nicht festgestellt. Nach
mysqli::__construct()
Sie haben zu prüfen,mysqli::$connect_error
, die defekt war einige PHP-Versionen:Sehen, dass die Verbindung Kessel-Platte aus der Dokumentation der
mysqli::__construct()
:EDIT: ich glaube, die Frage, die ich weiter unten beschreiben, ist die Ursache des Problems ist die OP beschreibt, aber da das problem beschreibe ich in meiner Antwort nicht produzieren, die genau die gleiche Fehlermeldung, ich bin mir nicht mehr sicher, dies ist die beste Antwort.
Auch bemerkte ich das aus dem PHP-docs-Kommentar:
Original Antwort:
Diese Warnung tritt auf, wenn Sie versuchen, zu bewerten, bestimmte Objekte (Instanz einer Klasse) als string.
Ihre debugger/IDE, ist der Versuch zu bewerten, eine Ihrer Variablen ($stmt), vielleicht eine Uhr, die Liste oder Aufruf-stack, und es kann nicht bewertet werden, da ein string.
Wenn Sie
print_r
auf die variable, die Sie bekommen werden die gleichen Fehler, weil PHP kann nicht schalten Sie es in einen string.In Ihrem Fall ist es die $stmt, dass PHP nicht in einen string.
Diesen code auf Zeile 7, und Sie sehen die Fehler, die es gibt:
Etwas Randnotiz: ich hatte nie dieses Problem vor kurzem. In letzter Zeit habe ich immer sehr. Warum nicht php, überspringen Sie einfach die unzugänglichen Eigenschaften und drucken Sie die restlichen? Ich glaube, es hat zu tun mit der Absicht, die Eigenschaften oder die Verwendung von Getter/setter, aber ich bin noch nicht ganz sicher. Ich werde aktualisieren, wenn ich herausfinden, dass ein Teil aus.
von der offiziellen PHP-Dokumentation:
(http://php.net/manual/en/language.oop5.magic.php#object.tostring)