Erro no bind_param no PHP

To com esse cod. em PHP e aparece erro na $stmt->bind_param(“i”, $id);
Tabela e BD estão certos, o que pode ser?
to usando o Wampserver.

Bloco de Citação

<?php $host = "localhost"; $user = "root"; $pass = ""; $db = "teste2"; $conn = new mysqli($host, $user, $pass, $db); // ASSUNTO DA AULA $id = 4; $stmt = $conn->prepare("SELECT * FROM itens WHERE id > ?"); $stmt->bind_param("i", $id); $stmt->execute(); $result = $stmt->get_result(); $data = $result->fetch_all(); print_r($data);

Qual a mensagem de erro? Ou o parâmetro é passado, mas a consulta não funciona?

Abraço.

Por algum motivo (provavelmente distração minha), não vi a notificação da resposta. Se ainda estiver com problema, segue uma explicação.

O erro diz que você está tentando chamar a função bind_param em um bool. Isso indica que a variável $stmt está como bool, não como mysqli_stmt, que é o tipo que contém o bind_param.

Sua variável $stmt é preenchida pelo $conn->prepare, então essa instrução deve estar falhando pois, quando ela falha, retorna false (um bool), de acordo com a documentação ( PHP: mysqli::prepare - Manual ). Possivelmente, sua conexão (variável $conn) está falhando, por isso, todos os comandos posteriores (prepare e bind_param) falham também.

Abraço.

O que devo mudar nesse cód. pra funcionar?
Valeu a ajuda.

Não dá pra dar uma resposta direta porque não tenho seu ambiente aqui, mas você precisa garantir que sua conexão está funcionando corretamente, ou seja, se a variável $conn tem uma conexão válida. É recomendado você ativar o log de erros antes de tentar a conexão. Veja a documentação e os exemplos em PHP: mysqli::__construct - Manual .

<?php

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // ativa o report de erros

$host = "localhost";
$user = "root";
$pass = "";
$db = "teste2"; 
$conn = new mysqli($host, $user, $pass, $db);

Isso deve disparar um erro se a conexão falhar, daí você pode investigar melhor.

Se deixar o report de erros desativado, pode usar uma comparação e a função mysqli_connect_errno pra testar o sucesso ou não da conexão:

<?php

error_reporting(0);
mysqli_report(MYSQLI_REPORT_OFF); // desativa o report de erros da conexão

$host = "localhost";
$user = "root";
$pass = "";
$db = "teste2"; 
$conn = new mysqli($host, $user, $pass, $db);

if (mysqli_connect_errno()) {
    throw new RuntimeException('Erro na conexao ' . mysqli_connect_error()); // exibe o erro, se houver
}

Sempre verifique também se o usuário e senha do seu mysql estão corretos (recomendo criar e usar outro usuário, em vez de usar o root), se o nome da base está correto, etc. Por exemplo, no seu código, a senha está vazia, mas está assim no mysql? Você está tentando acessar o host localhost, mas pode tentar também com 127.0.0.1 (sim, às vezes ocorre de o localhost não redirecionar pra 127.0.0.1, se não estiver configurado para tal).

Após isso, pode testar uma consulta mais simples que a atual, sem parâmetros, pra ver se funciona. Algo como:

<?php 

//.....código de conexão aqui

$stmt = $conn->prepare("SELECT * FROM itens WHERE id > 4");  // PRA TESTES, coloque um valor fixo no where em vez de usar parâmetros
$stmt->execute(); 
$result = $stmt->get_result(); 
$data = $result->fetch_all(); 
var_dump($data);

Não esqueça que você pode usar var_dump pra exibir o valor de uma variável, e isso pode ajudar a entender o que está acontecendo. Pode fazer isso com qualquer variável ($conn, $stmt, $result, $data, …).

Abraço.