“L'accès à la propriété n'est pas permis” d'avertissement lors de l'utilisation de l'instruction préparée
Je suis en train de faire un système de connexion en utilisant AES_ENCRYPT()
pour coder mon mot de passe. Mais j'ai un avertissement de xdebug lors de la tentative de mise en œuvre de ces 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();
...
Lorsque le débogueur répond à la ligne 8 ou $stmt->prepare($sql);
, 6 avertissement même des tables à partir de xdebug dit:
(!) Warning: main(): l'accès à la Propriété n'est pas permis dans D:\xampp\htdocs\learnphp\includes\authenticate_mysqli.inc.php sur la ligne 8
L'erreur de propriété dans $stmt
est vide et je n'ai pas de réel problème, mais je veux juste savoir ce qui cause ce message d'avertissement apparaît.
Googlé ce message d'avertissement, mais n'ai pas trouvé de solution:
- Requête de mise à JOUR avec les requêtes préparées
- http://php.net/manual/en/mysqli-stmt.param-count.php
stmt_init()
? Je n'ai jamais vu ça avant. Habituellement, il est $db->prepare(...)
directement.Je suis une exemple dans php.net
C'est bizarre, parce qu'il y a autres de documentation qui suggère que vous pouvez appeler
prepare
directement sur le lien que vous avez, et je l'ai toujours vu qu'il fait de cette manière.Veuillez voir ma réponse ici: stackoverflow.com/questions/28870315/... (dupe question, pas sûr de la façon de le marquer comme tel)
peut-être ceci: stackoverflow.com/questions/25377030/...
OriginalL'auteur weeix | 2013-09-16
Vous devez vous connecter pour publier un commentaire.
Votre connexion mysql n'était probablement pas établie. Après
mysqli::__construct()
vous devez vérifiermysqli::$connect_error
, qui a été cassé pour certaines versions de PHP:Voir la connexion de la chaudière de la plaque à partir de la documentation de
mysqli::__construct()
:OriginalL'auteur Markus Malkusch
EDIT: je crois que le problème que je décris ci-dessous est la cause de la question de l'OP décrit, cependant, car le problème que j'ai décrit dans ma réponse ne produisent pas exactement le même message d'erreur, je ne suis plus sûr que c'est la meilleure réponse.
Aussi, j'ai remarqué cela depuis le PHP docs section des commentaires:
Réponse originale à cette question:
Cet avertissement se produit lorsque vous essayez d'évaluer certains objets (une instance d'une classe) comme une chaîne de caractères.
Votre débogueur/IDE est d'essayer d'évaluer l'un de vos variables ($stmt), peut-être dans une liste de surveillance ou de la pile d'appel, et il ne peut pas être évalué comme une chaîne de caractères.
Si vous ne
print_r
sur la variable, vous obtiendrez la même erreur, car PHP ne peut pas la transformer en une chaîne de caractères.Dans votre cas, c'est le $stmt que PHP ne peut pas se transformer en une chaîne de caractères.
Mettre ce code sur la ligne 7, et vous verrez l'erreur là:
Quelque peu côté remarque: je n'ai jamais eu ce problème avant récemment. Dernièrement, j'ai été faire beaucoup. Pourquoi ne pas php, sautez simplement la inaccessible propriétés et imprimer le reste? Je crois qu'il a à voir avec l'étendue des biens ou de l'utilisation des getters/setters, mais je ne suis pas encore sûr. Je mettrai à jour quand je l'ai trouver cette partie.
à partir de la documentation officielle de PHP:
(http://php.net/manual/en/language.oop5.magic.php#object.tostring)
Je ne vois pas votre double drapeau. Cependant je te confirme que c'est absolument le cas dans certains environnements. La cause de ce problème, au moins dans le cas que j'ai trouvé, testé et vérifié, avait à voir avec le fait d'essayer d'évaluer un objet (instance de classe) comme une chaîne de caractères. Il n'est pas un bug, parce que PHP a clairement documenté: php.net/manual/en/language.oop5.magic.php#object.tostring
Les documents également état que ce comportement a changé depuis PHP 5.2. Je vais mettre à jour ma réponse à inclure l'extrait de php.net/manual/en/language.oop5.magic.php
En fait, je veux revenir un petit peu. Même si je crois que ces questions sont couplés/directement liée, il apparaît que l'avertissement que je viens de décrire n'est pas exactement le même que l'OP. J'ai aussi trouvé ce commentaire sur le PHP docs qui décrit la Fpo est exactement la question: php.net/manual/en/mysqli-stmt.param-count.php#89490
OriginalL'auteur Evan de la Cruz