Domanda

Ho una funzione che genera un'istruzione INSERT preparata basata su una matrice associativa di nomi e valori di colonne da inserire in quella colonna e un nome di tabella (una semplice stringa):

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;
    }

Il mio problema è che $ this- > conn- > prepar (fa parte di una classe, conn è un NUOVO oggetto mysqli, che funziona senza problemi) restituisce false, ma non mi dà un motivo per cui!

Ecco un esempio di $ sqlString che viene creato per l'istruzione preparazione:

INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)

Qualcuno può vedere un problema con questa istruzione con parametri? Qualche motivo per cui la funzione di preparazione restituisce false?

È stato utile?

Soluzione

Sto copiando la soluzione in questa risposta in modo che possa essere dato un voto positivo, altrimenti la domanda apparirà nelle "domande senza risposta". per sempre. Segnerò questa risposta in CW, quindi non otterrò alcun punto.

@Andrew E. dice:

  

Ho appena acceso    mysqli_report (MYSQLI_REPORT_ALL) in   capire meglio cosa fosse   continuando - risulta che uno dei miei   i nomi dei campi non erano corretti   pensa che prepar () lanci un   eccezione, ma fallisce silenziosamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top