Mysqli-Update löst den Fehler bind_param () einer Member-Funktion aus

Hallo, ich habe ein 70/80-Feld-Formular, das ich in eine Tabelle einfügen muss. Anstatt also manuell eine große Einfügeanweisung zu erstellen, habe ich zuerst eine Tabelle in meiner Datenbank aus den Namen der Eingaben im Formular erstellt. Hier ist der Code, den ich habe Verwenden Sie, um die Tabelle zu erstellen / zu ändern

function createTable($array, $memberMysqli)
{
   foreach ($array as $key => $value)
   {
            //echo "<p>Key: ".$key." => Value: ".$value . "</p>";
            $query = "ALTER TABLE questionnaire ADD ".$key."  text";

            if($stmt = $memberMysqli->prepare($query))
            {
                $success = $stmt->execute();
            }
   }
         echo "<h1>Array count: ". count($array) ."</h1>" ;
}

Dies funktioniert gut und veränderte den Tisch genau so, wie ich es wollte. Nun, um die Formularwerte einzufügen, mache ich ein einfaches Ein-Feld-Insert, speichere die ID der Zeile und lasse dann alle Post-Variablen die diese Zeile aktualisieren schleifen. Hier ist mein Code dafür:

$stmt = $memberMysqli->prepare("INSERT INTO questionnaire(userid) VALUES (?)");

$stmt->bind_param('s', $_POST['userid']);
$stmt->execute();
$rowid = $stmt->insert_id;
$stmt->close();

$memberMysqli->autocommit(FALSE);

function updateColumn($memberMysqli, $query, $uid, $value) 
{
    if ($value) 
    {
        $stmt = $memberMysqli->prepare($query);
        //Throws bind param error here
        $stmt->bind_param("ss", $value, $uid);
        $stmt->execute();
    }
}

function loopInputs($array, $memberMysqli, $rowid)
{
     foreach ($array as $key => $formvalue)
     {
        var_dump($key);
        updateColumn($memberMysqli, "UPDATE questionnaire SET $key = ? WHERE id = ?", $rowid, $formvalue);
     }
}

loopInputs($_POST, $memberMysqli, $rowid);

$memberMysqli->commit();
$memberMysqli->close();

Dies löst einen Bindeparameterfehler aus und ich habe keine Ahnung warum. Jede Hilfe wäre toll.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage