php - print - show sql error




Referência-O que esse erro significa em PHP? (20)

Atenção: mysql_fetch_array () espera que o parâmetro 1 seja um recurso, booleano dado

Em primeiro lugar:

Por favor, não use funções mysql_* no novo código . Eles não são mais mantidos e são oficialmente obsoletos . Veja a caixa vermelha ? Aprenda sobre instruções preparadas em vez disso, e use o PDO ou MySQLi - este artigo irá ajudá-lo a decidir qual. Se você escolher PDO, aqui está um bom tutorial .

Isso acontece quando você tenta buscar dados do resultado de mysql_query mas a consulta falha.

Este é um aviso e não irá parar o script, mas irá tornar o seu programa errado.

Você precisa verificar o resultado retornado por mysql_query

$res = mysql_query($sql);
if (!$res) {
   die(mysql_error());
}
// after checking, do the fetch

Perguntas relacionadas:

Erros relacionados:

Outras funções mysql* que também esperam um recurso de resultado do MySQL como parâmetro produzirão o mesmo erro pelo mesmo motivo.

O que é isso?

Este é um número de respostas sobre avisos, erros e avisos que você pode encontrar durante a programação do PHP e não tem idéia de como corrigir. Este também é um Wiki da Comunidade, por isso todos são convidados a participar adicionando e mantendo esta lista.

Por que é isso?

Perguntas como "Cabeçalhos já enviados" ou "Chamando um membro de um não objeto" são exibidas com freqüência no Stack Overflow. A causa raiz dessas questões é sempre a mesma. Assim, as respostas a essas perguntas normalmente as repetem e, em seguida, mostram o OP que linha para alterar em seu caso particular. Essas respostas não adicionam qualquer valor ao site porque elas se aplicam apenas ao código específico do OP. Outros usuários com o mesmo erro não podem facilmente ler a solução porque eles são muito localizados. Isso é triste porque uma vez que você entendeu a causa raiz, consertar o erro é trivial. Portanto, essa lista tenta explicar a solução de uma forma geral para aplicar.

O que devo fazer aqui?

Se sua pergunta foi marcada como uma duplicata disso, encontre sua mensagem de erro abaixo e aplique a correção ao seu código. As respostas geralmente contêm mais links para investigar, caso isso não deva ficar claro apenas pela resposta geral.

Se você quiser contribuir, adicione sua mensagem de erro "favorita", aviso ou aviso, uma por resposta, uma breve descrição do que isso significa (mesmo que esteja apenas destacando termos para sua página de manual), uma possível solução ou abordagem de depuração e uma listagem das perguntas e respostas existentes que são valiosas. Além disso, sinta-se à vontade para melhorar as respostas existentes.

A lista

Veja também


Aviso: Índice indefinido

Acontece quando você tenta acessar uma matriz por uma chave que não existe na matriz.

Um exemplo típico de um aviso do Undefined Index seria ( demo )

$data = array('foo' => '42', 'bar');
echo $data['spinach'];
echo $data[1];

Tanto o spinach quanto o 1 não existem no array, fazendo com que um E_WARNING seja acionado.

A solução é garantir que o índice ou deslocamento exista antes de acessar esse índice. Isso pode significar que você precisa corrigir um bug em seu programa para garantir que esses índices existam quando você espera que eles aconteçam. Ou pode significar que você precisa testar se os índices existem usando array_key_exists ou isset :

$data = array('foo' => '42', 'bar');
if (array_key_exists('spinach', $data)) {
    echo $data['spinach'];
}
else {
    echo 'No key spinach in the array';
}

Se você tem código como:

<?php echo $_POST['message']; ?>
<form method="post" action="">
    <input type="text" name="message">
    ...

então $_POST['message'] não será definido quando esta página for carregada pela primeira vez e você receberá o erro acima. Somente quando o formulário é submetido e esse código é executado uma segunda vez, o índice de array existe. Você normalmente verifica isso com:

if ($_POST)  ..  // if the $_POST array is not empty
// or
if ($_SERVER['REQUEST_METHOD'] == 'POST') ..  // page was requested with POST

Perguntas relacionadas:


Aviso: Deslocamento de seqüência de caracteres não inicializado: *

Como o nome indica, esse tipo de erro ocorre quando você provavelmente está tentando iterar ou encontrar um valor de uma matriz com uma chave inexistente.

Considere que você está tentando mostrar todas as letras de $string

$string = 'ABCD'; 
for ($i=0, $len = strlen($string); $i <= $len; $i++){
    echo "$string[$i] \n"; 
}

O exemplo acima irá gerar ( demonstração online ):

A
B
C
D
Notice: Uninitialized string offset: 4 in XXX on line X

E, assim que o script terminar ecoando D você obterá o erro, porque dentro do loop for() , você disse ao PHP para mostrar o caractere da primeira à quinta cadeia de 'ABCD' Que existe, mas desde o loop começa a contar a partir de 0 e ecoa D no tempo que alcança 4 , ele irá lançar um erro de deslocamento.

Erros semelhantes:

  • Deslocamento de cadeia ilegal 'opção 1'

Aviso: Uso da constante indefinida XXX - assumido 'XXX'

ou, no PHP 7.2 ou posterior:

Aviso: Uso da constante indefinida XXX - assumido 'XXX' (isso causará um erro em uma versão futura do PHP)

Esse aviso ocorre quando um token é usado no código e parece ser uma constante, mas uma constante com esse nome não está definida.

Uma das causas mais comuns deste aviso é a falta de citação de uma string usada como uma chave de matriz associativa.

Por exemplo:

// Wrong
echo $array[key];

// Right
echo $array['key'];

Outra causa comum é a falta de um sinal de $ (dólar) na frente do nome de uma variável:

// Wrong
echo varName;

// Right
echo $varName;

Ou talvez você tenha digitado errado alguma outra constante ou palavra-chave:

// Wrong
$foo = fasle;

// Right
$foo = false;

Também pode ser um sinal de que uma extensão ou biblioteca PHP necessária está faltando quando você tenta acessar uma constante definida por essa biblioteca.

Perguntas relacionadas:


Aviso: restrição open_basedir em vigor

Esse aviso pode aparecer com várias funções relacionadas ao acesso a arquivos e diretórios. Ele avisa sobre um problema de configuração.

Quando aparece, significa que o acesso foi proibido para alguns arquivos.

O aviso em si não quebra nada, mas na maioria das vezes um script não funciona corretamente se o acesso a arquivos for impedido.

A correção é normalmente para alterar a configuração do PHP , a configuração relacionada é chamada open_basedir .

Às vezes, os nomes de arquivos ou diretórios incorretos são usados, a correção é usar os corretos.

Perguntas relacionadas:


Aviso: variável indefinida

Acontece quando você tenta usar uma variável que não foi definida anteriormente.

Um exemplo típico seria

foreach ($items as $item) {
    // do something with item
    $counter++;
}

Se você não definiu $counter antes, o código acima irá acionar o aviso.

A maneira correta seria definir a variável antes de usá-la, mesmo que seja apenas uma string vazia como

$counter = 0;
foreach ($items as $item) {
    // do something with item
    $counter++;
}

Perguntas relacionadas:


Erro de análise: erro de sintaxe, inesperado T_PAAMAYIM_NEKUDOTAYIM

O operador de resolução de escopo também é chamado de "Paamayim Nekudotayim" do hebraico פעמיים נקודתיים. que significa "dois pontos duplos" ou "dois pontos duplos".

Esse erro normalmente acontece se você inadvertidamente colocar :: em seu código.

Perguntas relacionadas:

Documentação:


Erro de análise: erro de sintaxe, inesperado T_VARIABLE

Cenário possível

Eu não consigo encontrar onde meu código deu errado. Aqui está o meu erro completo:

Erro de análise: erro de sintaxe, T_VARIABLE inesperado na linha x

O que estou tentando

$sql = 'SELECT * FROM dealer WHERE id="'$id.'"';

Responda

Erro de análise: um problema com a sintaxe de seu programa, como deixar um ponto-e-vírgula fora do final de uma instrução ou, como no caso acima, perder a sintaxe . operador. O intérprete pára de executar seu programa quando ele encontra um erro de análise.

Em palavras simples, este é um erro de sintaxe, o que significa que há algo em seu código que o impede de ser analisado corretamente e, portanto, em execução.

O que você deve fazer é verificar cuidadosamente as linhas em torno de onde o erro está para erros simples.

Essa mensagem de erro significa que na linha x do arquivo, o interpretador do PHP esperava ver um parêntese aberto, mas, em vez disso, encontrou algo chamado T_VARIABLE . Essa coisa T_VARIABLE é chamada de token . É a maneira de o interpretador PHP expressar diferentes partes fundamentais dos programas. Quando o interpretador lê em um programa, ele traduz o que você escreveu em uma lista de tokens. Onde quer que você coloque uma variável em seu programa, há um token T_VARIABLE na lista do intérprete.

Boa leitura: lista de tokens do analisador

Portanto, certifique-se de ativar pelo menos E_PARSE no seu php.ini . Erros de análise não devem existir em scripts de produção.

Eu sempre recomendei adicionar a seguinte declaração, enquanto codificava:

error_reporting(E_ALL);

Relatório de erros PHP

Além disso, é uma boa idéia usar um IDE que permitirá que você saiba erros de digitação durante a digitação. Você pode usar:

  1. NetBeans (um bom pedaço de beleza, software livre) (o melhor na minha opinião)
  2. PhpStorm (tio Gordon adora isso: P, plano pago, contém software proprietário e gratuito)
  3. Eclipse (beleza e a fera, software livre)

Perguntas relacionadas:

  • Referência: Erros de Análise / Sintaxe do PHP; e como resolvê-los?

Erro fatal: Chame para uma função de membro ... em um não-objeto

Acontece com código semelhante a xyz->method() onde xyz não é um objeto e, portanto, esse method não pode ser chamado.

Este é um erro fatal que irá parar o script (aviso de compatibilidade: ele se tornará um erro que pode ser iniciado a partir do PHP 7).

Na maioria das vezes, isso é um sinal de que o código está sem verificações de condições de erro. Valide que um objeto é realmente um objeto antes de chamar seus métodos.

Um exemplo typical seria

// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);

No exemplo acima, a consulta não pode ser preparada e prepare() atribuirá false a $statement . Tentar chamar o método execute() resultará no erro fatal porque false é um "não objeto" porque o valor é um booleano.

Descubra por que sua função retornou um booleano em vez de um objeto. Por exemplo, verifique o objeto $pdo para o último erro que ocorreu. Detalhes sobre como depurar isso dependerão de como os erros são manipulados para a função / objeto / classe em questão.

Se mesmo o ->prepare estiver falhando, então seu objeto de manipulação de banco de dados $pdo não foi passado para o escopo atual . Encontre onde foi definido. Em seguida, passe-o como um parâmetro, armazene-o como propriedade ou compartilhe-o pelo escopo global.

Outro problema pode ser condicionalmente criar um objeto e, em seguida, tentar chamar um método fora desse bloco condicional. Por exemplo

if ($someCondition) {
    $myObj = new MyObj();
}
// ...
$myObj->someMethod();

Ao tentar executar o método fora do bloco condicional, seu objeto não pode ser definido.

Perguntas relacionadas:

  • Chamar para uma função de membro em um não objeto
  • Listar todo o PHP "Erro fatal: Chamar para uma função de membro ... em um não objeto" Perguntas no

Erro fatal: ligue para a função indefinida XXX

Acontece quando você tenta chamar uma função que ainda não está definida. Causas comuns incluem extensões ausentes e incluem declaração de função condicional, função em uma declaração de função ou simples erros de digitação.

Exemplo 1 - Declaração de Função Condicional

$someCondition = false;
if ($someCondition === true) {
    function fn() {
        return 1;
    }
}
echo fn(); // triggers error

Nesse caso, fn() nunca será declarado porque $someCondition não é verdadeiro.

Exemplo 2 - Função na declaração de função

function createFn() 
{
    function fn() {
        return 1;
    }
}
echo fn(); // triggers error

Neste caso, fn será declarado apenas quando createFn() for chamado. Observe que as chamadas subseqüentes para createFn() dispararão um erro sobre redeclaração de uma função existente.

Você também pode ver isso para uma função interna do PHP. Tente procurar a função no manual oficial , e verifique que "extensão" (módulo PHP) ela pertence, e quais versões do PHP a suportam.

No caso de uma extensão ausente, instale essa extensão e ative-a no php.ini. Consulte as Instruções de Instalação no Manual do PHP para a extensão em que sua função aparece. Você também pode habilitar ou instalar a extensão usando seu gerenciador de pacotes (por exemplo, apt no Debian ou Ubuntu, yum no Red Hat ou CentOS), ou painel de controle em um ambiente de hospedagem compartilhada.

Se a função foi introduzida em uma versão mais nova do PHP a partir do que você está usando, você pode encontrar links para implementações alternativas no manual ou na seção de comentários. Se ele foi removido do PHP, procure informações sobre o porquê, pois pode não ser mais necessário.

Em caso de falta de inclusão, certifique-se de incluir o arquivo que declara a função antes de chamar a função.

Em caso de erros de digitação, corrija o erro.

Perguntas relacionadas:

  • https://.com/search?q=Fatal+error%3A+Call+to+undefined+function

Erro fatal: não é possível usar o valor de retorno da função no contexto de gravação

Isso geralmente acontece quando se usa uma função diretamente com o empty .

Exemplo:

if (empty(is_null(null))) {
  echo 'empty';
}

Isto é porque empty é uma construção de linguagem e não uma função, não pode ser chamada com uma expressão como seu argumento em versões do PHP anteriores a 5.5. Antes do PHP 5.5, o argumento para empty() deve ser uma variável , mas uma expressão arbitrária (como um valor de retorno de uma função) é permissível no PHP 5.5+.

empty , apesar de seu nome, não verifica se uma variável está "vazia". Em vez disso, ele verifica se uma variável não existe ou == false . Expressões (como is_null(null) no exemplo) sempre serão consideradas como existentes, portanto, aqui empty está apenas verificando se é igual a false. Você poderia substituir empty() aqui por ! , por exemplo if (!is_null(null)) , ou explicitamente comparar com false, por exemplo if (is_null(null) == false) .

Perguntas relacionadas:


Erro fatal: tamanho de memória permitido de XXX bytes esgotados (tentou alocar XXX bytes)

Não há memória suficiente para executar seu script. O PHP atingiu o limite de memória e pára de executá-lo. Este erro é fatal, o script pára. O valor do limite de memória pode ser configurado no arquivo php.ini ou usando ini_set('memory_limit', '128 M'); no script (que sobrescreve o valor definido no php.ini ). A finalidade do limite de memória é evitar que um único script PHP englobe toda a memória disponível e coloque todo o servidor da web para baixo.

A primeira coisa a fazer é minimizar a quantidade de memória que seu script precisa. Por exemplo, se você está lendo um arquivo grande em uma variável ou está buscando muitos registros de um banco de dados e os armazena em uma matriz, isso pode usar muita memória. Altere seu código para, em vez disso, ler o arquivo linha por linha ou buscar registros do banco de dados, um de cada vez, sem armazená-los todos na memória. Isso requer um pouco de consciência conceitual do que está acontecendo nos bastidores e quando os dados são armazenados na memória, em outro lugar.

Se esse erro ocorreu quando o script não estava fazendo um trabalho intenso de memória, você precisa verificar seu código para ver se há um vazamento de memória. A função memory_get_usage é sua amiga.

Perguntas relacionadas:

  • Todos "Erro fatal: tamanho de memória permitido de XXX bytes esgotados" Perguntas no

MySQL: Você tem um erro na sua sintaxe SQL; verifique o manual que corresponde à sua versão do servidor MySQL para a sintaxe correta para usar perto de ... na linha ...

Esse erro geralmente é causado porque você esqueceu de escapar corretamente dos dados passados ​​para uma consulta MySQL.

Um exemplo do que não fazer (a "Idéia Ruim"):

$query = "UPDATE `posts` SET my_text='{$_POST['text']}' WHERE id={$_GET['id']}";
mysqli_query($db, $query);

Esse código pode ser incluído em uma página com um formulário para enviar, com um URL como http://example.com/edit.php?id=10 (para editar a postagem n ° 10)

O que acontecerá se o texto enviado contiver citações simples? $query terminará com:

$query = "UPDATE `posts` SET my_text='I'm a PHP newbie' WHERE id=10';

E quando esta consulta é enviada ao MySQL, ela irá reclamar que a sintaxe está errada, porque existe uma aspa simples no meio.

Para evitar esses erros, você DEVE sempre escapar dos dados antes de usá-los em uma consulta.

Escapar de dados antes de usar em uma consulta SQL também é muito importante, porque se você não fizer isso, seu script estará aberto para injeções de SQL. Uma injeção de SQL pode causar alteração, perda ou modificação de um registro, uma tabela ou um banco de dados inteiro. Esta é uma questão de segurança muito séria!

Documentação:


Nada é visto. A página está vazia e branca.

Também conhecida como a página branca da morte ou tela branca da morte . Isso acontece quando o relatório de erros é desativado e ocorre um erro fatal (geralmente um erro de sintaxe).

Se você tiver o log de erros ativado, você encontrará a mensagem de erro concreta em seu log de erros. Isso geralmente estará em um arquivo chamado "php_errors.log", em um local central (por exemplo, /var/log/apache2 em muitos ambientes Linux) ou no diretório do próprio script (às vezes usado em um ambiente de hospedagem compartilhada).

Às vezes, pode ser mais simples ativar temporariamente a exibição de erros. A página branca exibirá a mensagem de erro. Tome cuidado, porque esses erros são visíveis para todos que visitam o site.

Isso pode ser feito facilmente adicionando no topo do script o seguinte código PHP:

ini_set('display_errors', 1); error_reporting(~0);

O código ativará a exibição de erros e definirá o relatório para o nível mais alto.

Como o ini_set() é executado no tempo de execução, ele não possui efeitos nos erros de análise / sintaxe. Esses erros aparecerão no log. Se você quiser exibi-los na saída também (por exemplo, em um navegador), você deve definir a diretiva display_startup_errors como true . Faça isso no php.ini ou em um .htaccess ou por qualquer outro método que afete a configuração antes do tempo de execução .

Você pode usar os mesmos métodos para definir as diretivas error_log e error_log para escolher seu próprio local de arquivo de log.

Procurando no log ou usando a tela, você receberá uma mensagem de erro muito melhor e a linha de código em que seu script será interrompido.

Perguntas relacionadas:

Erros relacionados:


Aviso: Tentando obter propriedade de erro de não objeto

Acontece quando você tenta acessar uma propriedade de um objeto enquanto não há objeto.

Um exemplo típico para um aviso sem objeto seria

$users = json_decode('[{"name": "hakre"}]');
echo $users->name; # Notice: Trying to get property of non-object

Nesse caso, $usersé uma matriz (portanto, não um objeto) e não possui propriedades.

Isso é semelhante ao acesso a um índice ou chave inexistente de uma matriz (consulte Aviso: Índice indefinido ).

Este exemplo é muito simplificado. Na maioria das vezes, esse aviso sinaliza um valor de retorno não verificado, por exemplo, quando uma biblioteca retorna NULLse um objeto não existe ou apenas um valor não objeto inesperado (por exemplo, em um resultado Xpath, estruturas JSON com formato inesperado, XML com formato inesperado etc.) mas o código não verifica essa condição.

Como esses não-objetos são frequentemente processados ​​mais adiante, geralmente um erro fatal acontece em seguida ao chamar um método de objeto em um não-objeto (consulte: Erro fatal: Chamar para uma função de membro ... em um não-objeto ) interrompendo o roteiro.

Ele pode ser facilmente evitado, verificando se há condições de erro e / ou se uma variável corresponde a uma expectativa. Aqui tal aviso com um exemplo de DOMXPath :

$result  = $xpath->query("//*[@id='detail-sections']/div[1]");
$divText = $result->item(0)->nodeValue; # Notice: Trying to get property of non-object

O problema é acessar a nodeValuepropriedade (campo) do primeiro item enquanto ele não foi verificado se ele existe ou não na $resultcoleção. Em vez disso, vale a pena tornar o código mais explícito ao atribuir variáveis ​​aos objetos nos quais o código opera:

$result  = $xpath->query("//*[@id='detail-sections']/div[1]");
$div     = $result->item(0);
$divText = "-/-";
if ($div) {
    $divText = $div->nodeValue;
}
echo $divText;

Erros relacionados:

  • Aviso: Índice indefinido
  • Erro fatal: Chame para uma função de membro ... em um não-objeto

Aviso: compensação de cadeia ilegal 'XXX'

Isso acontece quando você tenta acessar um elemento de matriz com a sintaxe de colchetes, mas você está fazendo isso em uma cadeia, e não em uma matriz, portanto, a operação claramente não faz sentido .

Exemplo:

$var = "test";
echo $var["a_key"];

Se você acha que a variável deve ser um array, veja de onde vem e corrija o problema lá.


Aviso: mysql_connect (): Acesso negado para o usuário 'name' @ 'host'

Este aviso aparece quando você se conecta a um servidor MySQL / MariaDB com credenciais inválidas ou ausentes (nome de usuário / senha). Portanto, isso normalmente não é um problema de código, mas um problema de configuração do servidor.

  • Veja a página de manual mysql_connect("localhost", "user", "pw")para exemplos.

  • Verifique se você realmente usou um $usernamee $password.

    • É incomum que você tenha acesso usando nenhuma senha - que é o que aconteceu quando o Aviso: disse (using password: NO).
    • Somente o servidor de teste local geralmente permite conectar com nome de usuário root, sem senha e o testnome do banco de dados.

    • Você pode testar se eles estão realmente corretos usando o cliente de linha de comando:
      mysql --user="username" --password="password" testdb

    • O nome de usuário e a senha diferenciam maiúsculas e minúsculas e o espaço em branco não é ignorado. Se a sua senha contiver meta caracteres $, escape-os ou coloque a senha entre aspas simples .

    • A maioria dos provedores de hospedagem compartilhada predeclare contas mysql em relação à conta de usuário unix (às vezes apenas prefixos ou sufixos numéricos extras). Veja os documentos para um padrão ou documentação e CPanel ou qualquer interface para definir uma senha.

    • Veja o manual do MySQL em Adicionando contas de usuários usando a linha de comando. Quando conectado como usuário administrador, você pode emitir uma consulta como:
      CREATE USER 'username'@'localhost' IDENTIFIED BY 'newpassword';

    • Ou use o Adminer ou o WorkBench ou qualquer outra ferramenta gráfica para criar, verificar ou corrigir detalhes da conta.

    • Se você não puder consertar suas credenciais, pedir à internet "por favor, ajude" não terá efeito. Somente você e seu provedor de hospedagem têm permissões e acesso suficiente para diagnosticar e consertar as coisas.

  • Verifique se você pode acessar o servidor de banco de dados usando o nome do host fornecido pelo seu provedor:
    ping dbserver.hoster.example.net

    • Verifique isso em um console SSH diretamente em seu servidor da web. O teste do seu cliente de desenvolvimento local para o servidor de hospedagem compartilhada raramente é significativo.

    • Muitas vezes você quer apenas que o nome do servidor seja "localhost", o que normalmente utiliza um soquete nomeado local quando disponível. Outras vezes você pode tentar "127.0.0.1"como substituto.

    • Se o seu servidor MySQL / MariaDB escutar em uma porta diferente, use "servername:3306".

    • Se isso falhar, talvez haja um problema de firewall. (Off-topic, não uma questão de programação. Não é possível adivinhar remotamente.)

  • Ao usar constantes como, por exemplo , DB_USERou DB_PASSWORD, verifique se elas estão realmente defined .

    • Se você receber um "Warning: Access defined for 'DB_USER'@'host'"e um "Notice: use of undefined constant 'DB_PASS'", então esse é o seu problema.

    • Verifique se o seu exemplo xy/db-config.phpfoi realmente incluído e o que é.

  • Verifique as GRANTpermissões definidas corretamente .

    • Não é suficiente ter um par username+ password.

    • Cada conta MySQL / MariaDB pode ter um conjunto anexado de permissões.

    • Eles podem restringir quais bancos de dados você tem permissão para se conectar, de qual cliente / servidor a conexão pode se originar, e quais consultas são permitidas.

    • O aviso "Acesso negado", assim, também pode aparecer para mysql_querychamadas, se você não tiver permissões para SELECTde uma tabela específica, ou INSERT/ UPDATEe mais comumente DELETEqualquer coisa.

    • Você pode adaptar as permissões de conta quando conectado por cliente de linha de comando usando a conta admin com uma consulta como:
      GRANT ALL ON yourdb.* TO 'username'@'localhost';

  • Se o aviso aparecer primeiro, Warning: mysql_query(): Access denied for user ''@'localhost'então você pode ter um par de conta / senha pré-configurado pelo php.ini .

    • Verifique isso mysql.default_user=e mysql.default_password=tenha valores significativos.

    • Muitas vezes, isso é uma configuração de provedor. Portanto, entre em contato com o suporte para incompatibilidades.

  • Encontre a documentação do seu provedor de hospedagem compartilhada:

  • Observe que você também pode ter esgotado o pool de conexão disponível . Você terá acesso negado avisos para muitas conexões simultâneas. (Você tem que investigar a configuração. Isso é um problema de configuração do servidor off-topic, não uma questão de programação.)

  • Sua versão do cliente libmysql pode não ser compatível com o servidor de banco de dados. Normalmente os servidores MySQL e MariaDB podem ser acessados ​​com PHPs compilados no driver. Se você tem uma configuração personalizada, ou uma versão desatualizada do PHP, e um servidor de banco de dados muito mais novo, ou um desatualizado significativamente, a incompatibilidade de versão pode impedir conexões. (Não, você tem que se investigar. Ninguém pode adivinhar sua configuração).

Mais referências:

Btw, você provavelmente não quer mysql_*mais usar funções . Os recém-chegados geralmente migram para o mysqli , o que, no entanto, é igualmente tedioso. Em vez disso, leia o PDO e prepare as declarações .
$db = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");


Código não é executado / o que parece partes do meu código PHP saem

Se você não vê nenhum resultado do seu código PHP e / ou você está vendo partes do seu código literal de PHP na página, você pode ter certeza que seu PHP não está sendo executado. Se você usar o View Source em seu navegador, provavelmente verá todo o arquivo de código-fonte do PHP. Como o código PHP é incorporado em <?php ?>tags, o navegador tentará interpretá-las como tags HTML e o resultado poderá parecer um pouco confuso.

Para realmente executar seus scripts PHP, você precisa:

  • um servidor web que executa seu script
  • para definir a extensão do arquivo para .php, caso contrário, o servidor da Web não o interpretará como tal *
  • para acessar seu arquivo .php através do servidor web

* A menos que você reconfigure, tudo pode ser configurado.

Este último é particularmente importante. Basta clicar duas vezes no arquivo para abri-lo no navegador usando um endereço como:

file://C:/path/to/my/file.php

Isso está ignorando completamente qualquer servidor da Web que você possa estar executando e o arquivo não está sendo interpretado. Você precisa visitar a URL do arquivo em seu servidor da Web, provavelmente algo como:

http://localhost/my/file.php

Você também pode querer verificar se está usando tags abertas curtas em <?vez de <?phpe sua configuração do PHP desativou tags abertas curtas.

Veja também o código PHP não está sendo executado, em vez disso, o código mostra na página


Erro fatal: [TraitA] e [TraitB] definem a mesma propriedade ([$ x]) na composição de [ClassC]

Ocorre quando uma classe tenta usevárias Caracteres , em que duas ou mais dessas Características definiram uma propriedade pelo mesmo nome e com a propriedade tendo valores iniciais diferentes.

Exemplo:

<?php
trait TraitA
{
    public $x = 'a';
}
trait TraitB
{
    public $x = 'b';
}
class ClassC
{
    use TraitA, TraitB;
}

Problemático: Embora seja possível resolver conflitos entre métodos concorrentes , não há atualmente nenhuma sintaxe que resolva um conflito entre duas propriedades concorrentes. A única solução neste momento é refactor ; isto é, evite um conflito entre nomes de propriedades que produzam um erro fatal.

Perguntas relacionadas:


Aviso: [function] espera que o parâmetro 1 seja um recurso, booleano dado

(Uma variação mais geral de Warning: mysql_fetch_array () espera que o parâmetro 1 seja um recurso, dado booleano )

Recursos são um type no PHP (como strings, inteiros ou objetos). Um recurso é um blob opaco sem valor próprio inerentemente significativo. Um recurso é específico e definido por um determinado conjunto de funções ou extensões do PHP. Por exemplo, a extensão Mysql define dois tipos de recursos :

Existem dois tipos de recursos usados ​​no módulo MySQL. O primeiro é o identificador de link para uma conexão de banco de dados, o segundo é um recurso que contém o resultado de uma consulta.

A extensão cURL define outros dois tipos de recursos :

... uma alça cURL e uma alça multi cURL.

Quando var_dumped, os valores são assim:

$resource = curl_init();
var_dump($resource);

resource(1) of type (curl)

Isso é tudo que a maioria dos recursos é, um identificador numérico ( (1)) de um certo tipo ( (curl)).

Você carrega esses recursos e os transmite para diferentes funções para as quais tal recurso significa alguma coisa. Normalmente, essas funções alocam determinados dados em segundo plano e um recurso é apenas uma referência que eles usam para acompanhar esses dados internamente.

O erro " ... espera que o parâmetro 1 seja resource, boolean given " é tipicamente o resultado de uma operação não verificada que deveria criar um recurso, mas retornou em seu falselugar. Por exemplo, a fopenfunção tem essa descrição:

Valores de retorno

Retorna um recurso de ponteiro de arquivo com sucesso ou FALSEcom erro.

Então, neste código, $fpserá um resource(x) of type (stream)ou false:

$fp = fopen(...);

Se você não verificar se a fopenoperação foi bem-sucedida ou não e, portanto, se $fpé um recurso válido ou falsee passar $fppara outra função que espera um recurso, você pode obter o erro acima:

$fp   = fopen(...);
$data = fread($fp, 1024);

Warning: fread() expects parameter 1 to be resource, boolean given

Você sempre precisa verificar o valor de retorno das funções que estão tentando alocar um recurso e podem falhar :

$fp = fopen(...);

if (!$fp) {
    trigger_error('Failed to allocate resource');
    exit;
}

$data = fread($fp, 1024);

Erros relacionados:





warnings