2017-12-25 3 views
-1

Ich habe eine Funktion zum Einfügen von Daten in die MySQL-Datenbank erstellt. DieseUngültige Parameternummer beim Versuch, die Funktion auszuführen

// Inserting in the database 
public function addData($table, array $columns, array $values) { 
    // Defining columns 
    $each_column = null; 
    foreach ($columns as $column) { 
     $each_column .= '`' . $column . '`, '; 
    } 
    $column_sentence = substr($each_column, 0, -2); 

    // Defining values 
    $each_value = null; 
    foreach ($values as $value) { 
     $each_value .= ':' . $value . ', '; 
    } 
    $value_sentence = substr($each_value, 0, -2); 

    // Go ahead with prepared SQL 
    $sql = "INSERT INTO `$table` ($column_sentence) VALUES ($value_sentence)"; 
    $statement = $this->pdo->prepare($sql); 

    foreach (array_combine($columns, $values) as $column => $value) { 
     $statement->bindValue(':' . $column, $value); 
    } 

    // Execute that baby 
    $statement->execute(); 

    $statement->errorCode(); 
    $statement->errorInfo(); 
} 

ist, wie ich diese Funktion zu starten:

$db->addData('test', array('id', 'ip', 'name'), array(24, 123456789, 'Reza')); 

Mein Problem ist, dass ich diese Warnung erhalten:

Warnung: PDOStatement :: execute(): SQLSTATE [HY093] : Ungültiger Parameter Nummer: Parameter wurde nicht definiert

Was exac ist falsch mit dieser Funktion?

+0

Bitte überprüfen https://stackoverflow.com/questions/14814592/warning-pdostatementexecute-sqlstatehy093-invalid-parameter-number-par? rq = 1 –

+1

Ich denke, dass Sie den Inhalt des tatsächlichen Werts mit einem Doppelpunkt vor ihnen in dem Abschnitt VALUES setzen, aber dann versuchen, sie durch die Namen der Spalten aufzurufen. Wenn ich es richtig lese. –

Antwort

2

Sie verwenden die Werte als anstelle der Spaltennamen im Wertebereich.

public function addData($table, array $columns, array $values) { 
     // Defining columns 
     $each_column = null; 
     foreach ($columns as $column) { 
      $each_column .= '`' . $column . '`, '; 
     } 
     $column_sentence = substr($each_column, 0, -2); 

     // Defining values 
     // FIX : put the column names in the VALUES() 
     $each_column = null; 
     foreach ($columns as $column) { 
      $each_column .= ':' . $column . ', '; 
     } 
     $value_sentence = substr($each_column, 0, -2); 

     // rest of code snipped 
    } 

Vor

INSERT INTO `test` (`id`, `ip`, `name`) VALUES (:24, :123456789, :Reza) 

Nach

INSERT INTO `test` (`id`, `ip`, `name`) VALUES (:id, :ip, :name) 
+0

Absolut richtig. Danke, das hat mir sehr geholfen! –

Verwandte Themen