Mysqli Prepare Declaração - Retornando Falso, mas por quê?
-
10-07-2019 - |
Pergunta
Eu tenho uma função que gera uma instrução INSERT preparada com base em uma matriz associativa de nomes e valores da coluna a ser inserido nessa coluna e um nome de tabela (uma string simples):
function insert ($param, $table) {
$sqlString = "INSERT INTO $table (".implode(', ',array_keys($param)).') VALUES ('.str_repeat('?, ', (count($param) - 1)).'?)';
if ($statement = $this->conn->prepare($sqlString)):
$parameters = array_merge(array($this->bindParams($param), $param));
call_user_func_array(array($statement, 'bind_param', $parameters));
if (!$statement->execute()):
die('Error! '.$statement->error());
endif;
$statement->close();
return true;
else:
die("Could Not Run Statement");
endif;
}
Meu problema é que $ this-> conn-> prepare (é parte de uma classe, conn é um NOVO mysqli objeto, que funciona sem problemas) retorna falso, mas não me dá uma razão!
Aqui está um exemplo $ SQLString que é construído para a instrução preparar:
INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
Alguém pode ver um problema com esta declaração parametrizada? Qualquer razão a função de preparar iria retornar falso?
Solução
Eu estou copiando a solução para esta resposta assim que este pode ser dado um upvote, caso contrário, a questão será exibida nas "questões não respondidas" para sempre. Estou marcando esta resposta CW por isso não terá nenhuma pontos.
@ Andrew E. diz:
Eu apenas ligado
mysqli_report(MYSQLI_REPORT_ALL)
para obter uma melhor compreensão do que era acontecendo - Acontece que um dos meus nomes de campo estava incorreto - Você teria acho queprepare()
iria lançar uma exceção, mas falha silenciosamente.