Função de membro bind_param ()

O que pode estar errado nesse código?

if($id == -1)
{
	$stmt = $obj_mysqli->prepare("INSERT INTO usuario (sobrenome, cidade) VALUES (?,?)");
	$stmt->bind_param('ss', $sobrenome, $cidade);
	if(!$stmt->execute())
	{
		$erro = $stmt->error;
	}
}

É um site hospedado online e me retorna esse erro ao cadastras:

Chame para uma função de membro bind_param () em booleano em /storage/ssd2/273/8711273/public_html/index.php

Tem que ver se $stmt é válido, talvez a sua SQL esteja com problemas.

Dê um var_dump($stmt) para ver o resultado.

Eu inseri dessa forma
var_dump($stmt) ->bind_param('ss', $sobrenome, $cidade);
E ao tentar inserir os valores retorna o mesmo erro, mas ele retorna bool(false) também
É uma hospedagem no 000webhost e o banco é MySql pelo phpMyAdmin

Tem problemas ele não está retornar corretamente, o problema talvez seja na SQL, mas, não posso afirmar, ou aqui $obj_mysqli->prepare você poderia colocar o código inteiro?

Código PHP:

<?php 
	$obj_mysqli = new mysqli("localhost", "id8711273_server", "*******", "server");

	if ($obj_mysqli->connect_errno)
	{
		echo "Ocorreu um erro na conexão com o banco de dados.";
		exit;
	}

	mysqli_set_charset($obj_mysqli, 'utf8');
	 
	//Incluímos um código aqui...
	$id     = -1;
	$sobrenome  = "";
	$cidade = "";

	//Validando a existência dos dados
	if(isset($_POST["sobrenome"]) && isset($_POST["cidade"]))
	{
		if(empty($_POST["sobrenome"]))
			$erro = "Campo email obrigatório";
		else
		if(empty($_POST["cidade"]))
			$erro = "Campo senha obrigatório";
		else
		{
			//Alterou aqui também.
			//Agora, o $id, pode vir com o valor -1, que nos indica novo registro, 
			//ou, vir com um valor diferente de -1, ou seja, 
					//o código do registro no banco, que nos indica alteração dos dados.
			$id     = $_POST["id"];
			$sobrenome  = $_POST["sobrenome"];
			$cidade = $_POST["cidade"];
					
			//Se o id for -1, vamos realizar o cadastro ou alteração dos dados enviados.
			if($id == -1)
			{
				$stmt = $obj_mysqli->prepare("INSERT INTO usuario (sobrenome, cidade) VALUES (?,?)");
				//var_dump($stmp) // return false;
				$stmt->bind_param('ss', $sobrenome, $cidade);
				if(!$stmt->execute())
				{
					$erro = $stmt->error;
				}
			}			
			else
			{
				$erro = "Número inválido";
			}
		}
	}
?>

Tem meu comentários no código. O que acho estranho é que em teste local na minha máquina pelo Xampp ele funciona normalmente que isso seria um cadastro bem básico de dois campos e quando coloquei online acabou acontecendo isso.

Talvez é algo no servidor, já conferiu todas as coisas, tabelas, configurações, etc?

Código me parece certo e já que funciona local é algo no servidor!

Eu fiz testes no próprio phpMyAdmin tentando adicionar manualmente e consegui, mas não compreendo o que pode causar esse erro ainda se o BD funciona manual.

verificou usuario e senha!

Foi besteira, no meu local o BD era server e no web ficou id8711273_server, ai eu colocava o usuário e errava o nome. Muito vacilo meu, obrigado pela ajuda.