Como resolver o erro 'Warning: mysql_fetch_array() expects parameter 1 to be resource' em PHP

Saiba como corrigir o erro comum relacionado à função mysql_fetch_array() em PHP.

O que significa 'Warning: mysql_fetch_array() expects parameter 1 to be resource'?

O erro 'Warning: mysql_fetch_array() expects parameter 1 to be resource' ocorre quando a função mysql_fetch_array() recebe um parâmetro que não é um recurso válido. Essa função é utilizada para obter uma linha de um resultado de uma consulta SQL em forma de array, mas se o parâmetro passado não for um recurso de resultado, o PHP emitirá esse aviso.

Causas Comuns do Erro

Um dos motivos mais comuns para este erro é não ter executado a consulta SQL corretamente, resultando em um valor false em vez de um recurso. Aqui estão algumas razões que podem levar a esse problema:

  • Consulta SQL mal formulada: Se a consulta falhar, não haverá resultado a ser processado.
  • Problemas de conexão com o banco de dados: Se a conexão com o banco de dados falhar, qualquer tentativa de realizar uma consulta resultará em um erro.

Como Diagnosticar o Problema

Para diagnosticar o problema, você deve verificar o resultado da consulta antes de passar para mysql_fetch_array(). Aqui está um exemplo:

$link = mysql_connect('localhost', 'usuario', 'senha');
if (!$link) {
    die('Não foi possível conectar: ' . mysql_error());
}

$result = mysql_query('SELECT * FROM tabela');
if (!$result) {
    die('Consulta falhou: ' . mysql_error());
}

while ($row = mysql_fetch_array($result)) {
    print_r($row);
}

Neste código, estamos primeiro tentando conectar ao banco de dados. Se a conexão falhar, exibimos uma mensagem de erro. Em seguida, executamos a consulta e verificamos se o resultado é válido. Se não for, novamente exibimos um erro.

Boas Práticas para Evitar Este Erro

  1. Sempre verifique a conexão: Antes de executar consultas, é importante garantir que a conexão com o banco de dados foi estabelecida com sucesso.
  2. Verifique o resultado da consulta: Sempre verifique o resultado retornado pela função mysql_query(). Um retorno false indica que a consulta falhou.
  3. Use PDO ou MySQLi: Considere mudar para PDO ou MySQLi, que oferecem melhores práticas de segurança e são mais modernos em comparação com a extensão mysql que está obsoleta.

Migrando para MySQLi ou PDO

Se você está utilizando a extensão mysql, é uma boa ideia migrar para MySQLi ou PDO. Aqui está um exemplo de como usar MySQLi:

$mysqli = new mysqli('localhost', 'usuario', 'senha', 'banco');
if ($mysqli->connect_error) {
    die('Erro de conexão (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}

$result = $mysqli->query('SELECT * FROM tabela');
while ($row = $result->fetch_assoc()) {
    print_r($row);
}

Nesse exemplo, a conexão é feita com MySQLi e as consultas são realizadas de maneira mais segura e eficiente. O método fetch_assoc() é utilizado para obter os resultados em um formato associativo, que é frequentemente mais útil.

Conclusão

O erro 'Warning: mysql_fetch_array() expects parameter 1 to be resource' é um alerta importante que ajuda os desenvolvedores a diagnosticar problemas de consulta. Ao seguir as boas práticas e verificar sempre os resultados, você pode evitar esse tipo de erro e garantir que suas aplicações PHP funcionem corretamente.

É comum encontrar erros ao trabalhar com banco de dados em PHP, especialmente quando se utiliza funções desatualizadas. O erro 'Warning: mysql_fetch_array() expects parameter 1 to be resource' é um exemplo típico que pode ser frustrante para iniciantes. No entanto, entender a causa desse erro e como evitá-lo pode melhorar significativamente sua experiência de programação. A prática de verificar sempre os resultados das consultas e de utilizar uma abordagem de programação mais moderna, como PDO ou MySQLi, são passos cruciais para desenvolver aplicações robustas e eficientes. Além disso, a migração para métodos mais novos não só resolve erros, mas também aprimora a segurança e a performance de suas aplicações.

Algumas aplicações:

  • Desenvolvimento de sites dinâmicos
  • Gerenciamento de dados em tempo real
  • Criação de sistemas de gestão

Dicas para quem está começando

  • Verifique sempre a conexão com o banco de dados.
  • Use var_dump() para depurar resultados de consultas.
  • Considere aprender PDO ou MySQLi.

Contribuições de Lucas Martins

Compartilhe este tutorial: O que significa 'Warning: mysql_fetch_array() expects parameter 1 to be resource'?

Compartilhe este tutorial

Continue aprendendo:

Como lidar com 'PHP Fatal error: Cannot override final method'?

Saiba como resolver o erro fatal 'Cannot override final method' no PHP com este guia completo.

Tutorial anterior

Como corrigir 'PHP Warning: Invalid argument supplied for json_decode()'?

Saiba como resolver o erro 'Invalid argument supplied for json_decode()' em PHP e evite problemas em suas aplicações.

Próximo tutorial