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?

Foi útil?

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 que prepare() iria lançar uma exceção, mas falha silenciosamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top