Sempre que você obtém o ...
"Aviso: mysqli_fetch_object () espera que o parâmetro 1 seja mysqli_result, dado booleano"
... é provável que haja um problema com sua consulta. O prepare()
ou query()
pode retornar FALSE
(um booleano), mas essa mensagem de falha genérica não deixa muita coisa para você. Como você descobre o que há de errado com sua consulta? Você pergunta !
Primeiro, verifique se o relatório de erros está ativado e visível: adicione essas duas linhas na parte superior do (s) arquivo (s) logo após a <?php
tag de abertura :
error_reporting(E_ALL);
ini_set('display_errors', 1);
Se o seu relatório de erros foi definido no php.ini, você não precisa se preocupar com isso. Apenas lembre-se de lidar com os erros normalmente e nunca revele a verdadeira causa de quaisquer problemas para seus usuários. Revelar a verdadeira causa ao público pode ser um convite gravado em ouro para aqueles que desejam prejudicar seus sites e servidores. Se você não deseja enviar erros ao navegador, sempre pode monitorar os logs de erros do servidor da web. As localizações dos logs variam de servidor para servidor, por exemplo, no Ubuntu, o log de erros geralmente está localizado em /var/log/apache2/error.log
. Se você estiver examinando logs de erro em um ambiente Linux, poderá usartail -f /path/to/log
em uma janela do console para ver os erros que ocorrem em tempo real ... ou enquanto os cria.
Quando você estiver concentrado nos relatórios de erros padrão, a adição de verificação de erros na conexão e nas consultas ao banco de dados fornecerá muito mais detalhes sobre os problemas. Veja este exemplo em que o nome da coluna está incorreto. Primeiro, o código que retorna a mensagem de erro fatal genérica:
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
O erro é genérico e não ajuda muito a resolver o que está acontecendo.
Com mais algumas linhas de código, você pode obter informações muito detalhadas que podem ser usadas para resolver o problema imediatamente . Verifique a prepare()
declaração quanto à veracidade e, se estiver bom, continue com a ligação e a execução.
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
// any additional code you need would go here.
} else {
$error = $mysqli->errno . ' ' . $mysqli->error; // 1054 Unknown column 'foo' in 'field list'
// handle error
}
Se algo estiver errado, você pode emitir uma mensagem de erro que o leva diretamente ao problema. Nesse caso, não há foo
coluna na tabela, resolver o problema é trivial.
Se você escolher, poderá incluir essa verificação em uma função ou classe e estendê-la, manipulando os erros normalmente, conforme mencionado anteriormente.