Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

wellingtonstz

falha com mysqli

Recommended Posts

Boa tarde galera, estou tentando conserta um site que eu tenho acesso da empresa antes era o PostgreSQL agora estou tentando atualizar para o mysqli, estou empacado e gostaria da ajuda de vocês. O erro em questão é:

 

[29-Oct-2018 16:36:16 America/Sao_Paulo] PHP Warning:  mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, boolean given in /home/tmengenh/public_html/cphp/contato.php on line 19

 


[29-Oct-2018 16:36:16 America/Sao_Paulo] PHP Warning:  mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, null given in /home/tmengenh/public_html/cphp/contato.php on line 22

 

Scripts:

(contatos.php)

<?php 
include "../lib/connection.php"; 

$nome =$_POST["nome"];
$assunto =$_POST["assunto"]; 
$ip =$_SERVER['REMOTE_ADDR'];
$telefone =$_POST["telefone"];
$email =$_POST["email"];
$v_mensagem =$_POST["menssagem"];             
                  

        $sql="INSERT INTO 'contato' (id_contato,nome,assunto,ip_cad_contato,telefone,email,mensagem,fg_ativo) VALUES(?,?,?,?,?,?,?,?)";
        
        $stmt = $connect->prepare($sql);

               $stmt = mysqli_stmt_bind_param ($stmt,'ssssss',$nome,$assunto,$ip,$telefone,$email,$v_mensagem);
        

        mysqli_stmt_execute($stmt);
 

        
         mysqli_close($connect);
         
$mensagem = "Novo Contato de $nome\n\n";
$mensagem .= "Nome: $nome\n\n";
$mensagem .= "Assunto: $assunto\n\n";  
$mensagem .= "Telefone: $telefone\n\n";  
$mensagem .= "Email: $email\n\n"; 
$mensagem .= "Menssagem: $v_mensagem\n\n";

mail("", "Novo Contato", $mensagem, "From: $nome");
        
?>
<script charset="utf-8">
    alert('Contato efetuado com Sucesso! Aguarde e entraremos em contato.');
    parent.window.location="../index.php";
</script>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Movido: MySQL -> PHP

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu problema está na query. A função MySQLi::prepare retorna um objeto ou FALSE em caso de erro:

Citar

mysqli_prepare() returns a statement object or FALSE if an error occurred.

No seu caso, está retornando um boolean (com o valor FALSO), pois, ocorreu um erro na query.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde, então eu tentei fazer varias fontes php, mais nenhuma deu certo, eu não sei sobre programação php, nada não fiz curso só vi algumas dicas em sites e youtube mais não consegui informação por isso estou perguntando e porque estou tentando atualizar esse site, você sabe o erro Gabriel?? vi que esta dando falso como você disse o erro esta no mysqli_prepare, mais não consigo concerta o erro você poderia me fala qual o erro no código que passei ou deve ser erro na tabela do mysql?? em anexo segue a tabela do mysql contato

 

mysql 2.JPG

Compartilhar este post


Link para o post
Compartilhar em outros sites

A coluna menssagem está com dois SS no banco de dados, na sua query está apenas com um.

 

Remova os apóstrofos da palavra/tabela contato, não tem necessidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde, era os dois ss mesmo, e tbm tirei os apóstrofos do contato!! mais apareceu a seguinte msg de erro, estou tentando pesquisa aqui..

 

o id_contato preciso coloca ou posso tira, pq o id_contato se encontra em outro codigo php, que se chama listacontatos.php???

 

segue abaixo as msg de erro

 

 

PHP Warning:  mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters in prepared statement in /home/tmengenh/public_html/cphp/contato.php on line 19

 

PHP Warning:  mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, boolean given in /home/tmengenh/public_html/cphp/contato.php on line 22

Compartilhar este post


Link para o post
Compartilhar em outros sites

1º erro - Na query, você definiu 8 parâmetros (que são as interrogações), no método abaixo, somente 6 (o número de "s" mais as variáveis seguintes):

$stmt = mysqli_stmt_bind_param ($stmt,'ssssss',$nome,$assunto,$ip,$telefone,$email,$v_mensagem);
        

Esses números devem ser compatíveis.

 

2º erro - É em decorrência do primeiro.

Compartilhar este post


Link para o post
Compartilhar em outros sites
coloquei o código desse jeito, mais ta dando esse erro abaixo:


PHP Warning:  mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, boolean given in /home/tmengenh/public_html/cphp/contato.php on line 22




código:


<?php 
include "../lib/connection.php"; 

$nome =$_POST["nome"];
$assunto =$_POST["assunto"]; 
$ip =$_SERVER['REMOTE_ADDR'];
$telefone =$_POST["telefone"];
$email =$_POST["email"];
$v_mensagem =$_POST["menssagem"];             
                  

        $sql="INSERT INTO 'contato' (nome, assunto, ip_cad_contato, telefone, email, menssagem, fg_ativo) VALUES(?,?,?,?,?,?,?)";
        
        $stmt = $connect->prepare($sql);

               $stmt = mysqli_stmt_bind_param ($stmt, "sssssss", $nome, $assunto, $ip, $telefone, $email, $v_mensagem, $ativo);
        

        mysqli_stmt_execute($stmt);
 

        
         mysqli_close($connect);
         
$mensagem = "Novo Contato de $nome\n\n";
$mensagem .= "Nome: $nome\n\n";
$mensagem .= "Assunto: $assunto\n\n";  
$mensagem .= "Telefone: $telefone\n\n";  
$mensagem .= "Email: $email\n\n"; 
$mensagem .= "Menssagem: $v_mensagem\n\n";

mail("", "Novo Contato", $mensagem, "From: $nome");
        
?>
<script charset="utf-8">
    alert('Contato efetuado com Sucesso! Aguarde e entraremos em contato.');
    parent.window.location="../index.php";
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Remova o código "$stmt = " da seguinte linha:

$stmt = mysqli_stmt_bind_param ($stmt, "sssssss", $nome, $assunto, $ip, $telefone, $email, $v_mensagem, $ativo);

Deixando apenas:

mysqli_stmt_bind_param ($stmt, "sssssss", $nome, $assunto, $ip, $telefone, $email, $v_mensagem, $ativo);

Ele retorna um boolean e está substituindo o statement

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Gabriel, retirei o $stmt,  agora não da nenhum erro, mais tbm não insere no banco de dados o que sera que é?? lembrando que esse site eu estou mexendo no cpanel, e a tabela ja é antiga eu só converti do PostgreSQL para o Mysql .. tem alguma coisa a ve?? 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Erro de conexão, verifica pra ver se está tudo correto, debuga e veja o que retorna.

 

Outro é que a coluna fg_ativo não pode ser NULL, você está passando o valor para ela na variável $ativo, e olhando seu código a variável citada nem existe, passe um valor para ela fixo ou insira variável.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Marcos, então acredito que esta conectando normalmente ao banco de dados pq eu acesso a area de login normalmente com o banco de dados..

 

não entendi como assim valor fixo ou insira variável,  sim não existe $ativo eu criei pq não sei o que coloca no fg_ativo!! ou é melhor exclui na tabela?

 

e igual eu falei, não tenho conhecimento em nada em programação!!

 

abaixo segue a conexão ao banco de dados:

 

connection.php

 

<?php
# Dados para a conexao com o banco de dados
    $servidor = 'ip';   #nome dns ou ip do seu servidor http
    $usuario = 'nome_do_usuario';         #nome de usuario para acesso ao msyqli
    $senha = 'senha';          #senha de acesso
    $banco = 'nome_do_banco';           #nome do banco de dados

# Executa a conexao com o mysqli
    @$connect = mysqli_connect($servidor, $usuario, $senha, $banco);
    
       if ($connect){
            echo "Erro na Comunicação com o Banco de Dados!";
            
            } else {
 echo "Parabens!! A conexão ao banco de dados ocorreu normalmente!";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

PHP Warning:  mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, null given in /home/tmengenh/public_html/cphp/contato.php on line 19

 

 

PHP Warning:  mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, null given in /home/tmengenh/public_html/cphp/contato.php on line 22
 

 

agora aparece esses erros acima!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenho outro código:

 

 sera que tem algum problema com o erro que esta acontecendo no outro código?

valores_contato.php segue abaixo: 

 

<?php

        

    /* Conex達o com o BD */

    include("../lib/connection.php");

    $cod_contato = $_GET['contato'];

    

    /* Constitui a string correspondente ao SQL */    

    $sql = " SELECT * FROM CONTATO WHERE ID_CONTATO = '$cod_contato' ";

    

    /* Realiza a consulta no BD */

    $resultado = mysqli_query($connect, $sql);

    

    $nome = mysql_result($resultado, 0, "nome");

    $assunto = mysql_result($resultado, 0, "assunto");

    $menssagem = mysql_result($resultado, 0, "mensagem");

    $email = mysql_result($resultado, 0, "email");

    $telefone = mysql_result($resultado, 0, "telefone");

    $codigo = mysql_result($resultado, 0 "id_con,tato");

    $ip = mysql_result($resultado, 0, "ip_cad_conato");

    

    include ("tabela_contato.php");

        

    /* Fehca a conex達o com o BD */

    mysqli_close($connect);

    

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 horas atrás, wellingtonstz disse:

PHP Warning:  mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, null given in /home/tmengenh/public_html/cphp/contato.php on line 19

 

 

PHP Warning:  mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, null given in /home/tmengenh/public_html/cphp/contato.php on line 22
 

 

agora aparece esses erros acima!!

Isso não são erros, são avisos que está faltando alguma coisa, pode estar faltando algum parâmetro.

 

Erro na linha abaixo:

$stmt = mysqli_stmt_bind_param ($stmt, "sssssss", $nome, $assunto, $ip, $telefone, $email, $v_mensagem, $ativo);

Olha novamente a imagem que postou do seu banco, na coluna fg_ativo, a coluna espera um int(11) e NÃO nulo, ou seja, apenas números inteiros(Ex: 1, 5, 28, 50, etc.). E não nulo quer dizer nunca pode deixar de inserir algo na coluna, entende? Você pode mudar isso pelo PHPMyAdmin mesmo, para VARCHAR por exemplo como os outros campos acima, depende do que quer inserir ali.

 

Olhe o código acima, na posição fg_status você está passando a variável $ativo, porém ela não existe, ou seja, você está passando algo NULO para o banco, mas a coluna não aceita NULO, por isso não deixará inserir. E novamente, só aceitará números inteiro, a não ser que você mude.

 

Pedi acima para passar um valor fixo para testar, apenas precisar substituir o $status algum número, 10 por exemplo. Se inserir, já achará o problema. Ex:

$stmt = mysqli_stmt_bind_param ($stmt, "sssssss", $nome, $assunto, $ip, $telefone, $email, $v_mensagem, 10);

Vai alterando e testando, apenas assim vai conseguir a solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Marcos, então eu ja tinha colocado 1 antes, pq era assim que estava quando era o PostgreSQL,  e tentei outros números tbm mais dava esse erro abaixo:

 

PHP Fatal error:  Only variables can be passed by reference in!! 

 

 

não sei pq tem esse fg_ativo, acho que não pode ter duas colunas com in, ou pode? e esse código e muito antigo mudou muitas as coisas neh.. mais to quebrando a cabeça aqui kkk, uma hr consigo!!

 

 

sera que não estou conseguindo pq tem contatos ja na tabela? ou nada ve

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Em 31/10/2018 at 23:09, marcosmarcolin disse:

Isso não são erros, são avisos que está faltando alguma coisa, pode estar faltando algum parâmetro.

 

Erro na linha abaixo:


$stmt = mysqli_stmt_bind_param ($stmt, "sssssss", $nome, $assunto, $ip, $telefone, $email, $v_mensagem, $ativo);

Olha novamente a imagem que postou do seu banco, na coluna fg_ativo, a coluna espera um int(11) e NÃO nulo, ou seja, apenas números inteiros(Ex: 1, 5, 28, 50, etc.). E não nulo quer dizer nunca pode deixar de inserir algo na coluna, entende? Você pode mudar isso pelo PHPMyAdmin mesmo, para VARCHAR por exemplo como os outros campos acima, depende do que quer inserir ali.

 

Olhe o código acima, na posição fg_status você está passando a variável $ativo, porém ela não existe, ou seja, você está passando algo NULO para o banco, mas a coluna não aceita NULO, por isso não deixará inserir. E novamente, só aceitará números inteiro, a não ser que você mude.

 

Pedi acima para passar um valor fixo para testar, apenas precisar substituir o $status algum número, 10 por exemplo. Se inserir, já achará o problema. Ex:


$stmt = mysqli_stmt_bind_param ($stmt, "sssssss", $nome, $assunto, $ip, $telefone, $email, $v_mensagem, 10);

Vai alterando e testando, apenas assim vai conseguir a solução.

Bom dia Anderson consegui, inserir na tabela contatos!! olha o código abaixo:

 

código:


<?php 
include "../lib/connection.php"; 

$nome =$_POST["nome"];
$assunto =$_POST["assunto"]; 
$telefone =$_POST["telefone"];
$email =$_POST["email"];
$v_mensagem =$_POST["menssagem"];             
$ip =$_SERVER['REMOTE_ADDR'];
$var =                 

        $sql="INSERT INTO 'contato' (nome, assunto, telefone, email, menssagem, fg_ativo) VALUES(?,?,?,?,?,?,?)";
        
         mysqli_stmt_prepare($stmt, $sql);

                   mysqli_stmt_bind_param ($stmt, "sssssss", $nome, $assunto, $ip, $telefone, $email, $v_mensagem, $var);
        

        mysqli_stmt_execute($stmt);
 

        
         mysqli_close($connect);
         
$mensagem = "Novo Contato de $nome\n\n";
$mensagem .= "Nome: $nome\n\n";
$mensagem .= "Assunto: $assunto\n\n";  
$mensagem .= "Telefone: $telefone\n\n";  
$mensagem .= "Email: $email\n\n"; 
$mensagem .= "Menssagem: $v_mensagem\n\n";

mail("", "Novo Contato", $mensagem, "From: $nome");
        
?>
<script charset="utf-8">
    alert('Contato efetuado com Sucesso! Aguarde e entraremos em contato.');
    parent.window.location="../index.php";
</script>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora queria uma ajuda com esse erro!!

 

que esta tendo o seguinte erro..

 

PHP Warning:  mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters in prepared statement in

 

e eu dei um var_dump, apareceu esse erro!!

 

Erro na Comunicação com o Banco de Dados!object(mysqli_stmt)#2 (10) { ["affected_rows"]=> int(0) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(0) ["field_count"]=> int(7) ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["sqlstate"]=> string(5) "00000" ["id"]=> int(1) }

 

segue o código abaixo:

valores_contato

 

 

<?php
        
  
 /* Conexão com o BD */
    include("../lib/connection.php");

    $cod_contato = $_GET['contato'];
    
    
/* Constitui a string correspondente ao SQL */    
    

    $stmt = mysqli_stmt_init($connect);
    
  
 if (mysqli_stmt_prepare ($stmt, 'SELECT id_contato, nome, assunto, ip_cad_contato, telefone, email, menssagem FROM contato WHERE 1'))
    
  
 /* atribui os parametros aos marcadores */
        mysqli_stmt_bind_param ($stmt, 'sssssss', $cod_contato, $nome, $assunto, $ip, $telefone, $email, $menssagem);
        
        
    
/* executa a query */
    mysqli_stmt_execute($stmt);
    
    
/* atribui as variaveis de resultado */
    
    mysqli_stmt_bind_result ($stmt, $codigo, $nome, $assunto, $ip, $telefone, $email, $menssagem);
    
    

     /* busca o valor */
    mysqli_stmt_fetch($stmt);

    
    
    
/* fecha a declaração */
    mysqli_stmt_close($stmt);

    include ("tabela_contato.php");
        
  
 /* Fehca a conexão com o BD */
    mysqli_close($connect);
    
?>

 

 

 

 

 

alguma ajuda Marcos ou Gabriel, agradeço!! sumiram

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.