Vous avez un peu de code PHP, je me débatte - eu une recherche autour de Google, etc. et j'ai essayé tout mentionné, mais pour une raison quelconque, j'ai du mal à résoudre.
Le problème est: P>
J'ai un certain code qui interroge une base de données pour la présence d'un utilisateur particulier. p>
Le code (c'est une méthode à l'intérieur d'une classe) p> Ceci est correct, il ne devrait y avoir qu'une ligne ci-dessus. p> Je reçois cette erreur de liaison à la ligne indiquant avis: essayer d'obtenir la propriété de non-objet dans le fichier La ligne de ligne p> mais je ne sais pas pourquoi, car l'objet est valide (comme ci-dessus) et cela devrait fonctionner correctement. D'après ce que je peux dire, il semble passer d'accord, je me demandais pourquoi il y a une erreur. Je suis sûr que c'est quelque chose de simple mais j'apprécierais toute aide. P> p> si ($ r-> num_rows) { code> p>
5 Réponses :
Je pensais juste que je devrais développer cela un peu.
Si vous exécutez une requête MySQLI Sélectionner qui renvoie 0 résultats, il renvoie false. P>
Cependant, si vous obtenez cette erreur et que vous avez écrit Votre propre fonction de requête MySQLI, vous pouvez également obtenir cette erreur si la requête que vous utilisez n'est pas une mise à jour, mais une mise à jour. Une requête de mise à jour reviendra être vraie ou false. Donc, si vous supposez simplement que tout résultat non faux aura des enregistrements renvoyés, vous allez trébucher lorsque vous exécutez une mise à jour ou autre chose que SELECT. P>
La solution la plus facile, une fois que vous avez vérifié que ce n'est pas faux. , est de vérifier d'abord que le résultat de la requête est un objet. p>
La première ligne de cette réponse est fausse. Il ne renvoie que false code> quand il y a une erreur. Une requête avec 0 correspondance n'est pas une erreur.
Vous avez manqué le bit où j'ai dit que vous exécutez une mise à jour, pas une sélection.
Désolé, je n'ai pas regardé de près la question. Je pensais que vous parliez de mysqli :: Query () code>, pas une méthode écrite d'utilisateur avec ses propres critères pour le retour
false code>.
J'ai travaillé à écrire un module personnalisé à Drupal 7 et obtenu la même erreur:
Avis: essayer d'obtenir une propriété de non-objet p> blockQuote>
Mon code est quelque chose comme ceci: p>
xxx pré> solution: Je viens d'ajouter une condition
si (is_object ($ sqlresult)) code>, et tout s'est bien passé. P>
Voici mon code final: p>
function mediaten_node_access($node, $op, $account) { if (is_object($node)){ if ($node->type == 'page' && $op == 'update') { drupal_set_message('This poll has been published, you may not make changes.','error'); return NODE_ACCESS_DENY; } } }
Je pense que ce n'est pas la raison pour laquelle tout le monde a dit au-dessus. Il y a quelque chose qui ne va pas dans votre code, peut-être manquer d'orthographe ou d'incompatibilité avec les noms de colonne de base de données. Si la requête MySQLI ne reçoit aucun résultat, elle reviendra de faux, de sorte que ce ne soit pas un objet - est une mauvaise idée. Tout fonctionne bien. Il retourne 1 ou 0 si la requête a des résultats ou non. p>
Donc, ma suggestion est de vérifier vos noms de variable et vos noms de colonne de table ou tout autre mal orthographique. p>
$sql = "SELECT * FROM table"; $result = $conn->query($sql); if (!$result) { trigger_error('Invalid query: ' . $conn->error); } check the error with mysqli_error() function probably your query has some faults.
La cause de votre problème est simple. Tant de personnes vont courir dans le même problème, parce que je faisais aussi et cela m'a pris heure pour comprendre. Juste au cas où, quelqu'un d'autre trébuche, le problème est dans votre requête, votre relevé de sélection appelle $ dbname code> au lieu du nom de la table. Donc, ce n'est pas trouvé pour le retour
faux code> qui est
booléen code>. Bonne chance. P>
C'est vraiment très étrange, essayez de
var_dump ($ r-> num_rows) code>. BTW: Si vous utilisez MySQLI, pourquoi n'utilisez-vous pas des déclarations préparées ou d'échapper au moins aux valeurs insérées?
avez-vous essayé $ r ["num_rows"]]
Ceci est juste au début du développement précoce pour le moment, je n'ai donc pas ajouté d'échappé, etc., mais dès sa publication, elle sera annulée en conséquence. Des idées sur mon problème réel?
Vous utilisez globalement, faites-moi de deviner que vous passez à un autre fichier à un autre fichier de traitement
@Haim oui j'ai utilisé $ mysqli = nouveau mysqli ("localhost", "utilisateur", '', 'db');
@Roshan Selon le manuel , la notation de La question est correcte
J'obtiens aussi
int (1) code> quand j'ajouter
var_dump ($ r-> num_rows) code> donc il semble que l'int (1) arrive, donc je n'ai aucune idée de pourquoi Un message apparaît ?!
Il semble fonctionner lorsque je change de renvoi de faux dans la déclaration IF à autre chose (c'est-à-dire retour vrai, etc.). Quelqu'un sache quelque chose derrière pourquoi?
Utilisez la fonction ISSET pour l'enregistrement si l'instruction: Si (ESSET ($ R-> NUM_ROWS))