2017-09-10 8 views
0

Wenn ich diese Funktion aufrufen, zeigt es keinen Fehler, aber Daten nicht eingefügt. Datenbankverbindung ist aktiviert und OK, Verbindungstyp PDO.php mysql pdo bineparam Daten nicht einfügen

public function insert(){ 
    $table = "category"; 
    $data = array(
     'cat_id' => 5, 
     'cat_name_en' => 'Science', 
     'cat_info' => 'All about nature', 
     'cat_tags' => 'Physics, chemistry' 
     ); 
    $keys  = implode(', ', array_keys($data)); 
    $values  = ":".implode(", :", array_keys($data)); 
    echo $sql = "INSERT INTO $table($keys) VALUES($values)"; 
    $stmt  = $this->db->prepare($sql); 
    foreach ($data as $key => $value) { 
     $stmt->bindParam(':'.$key, $value); 
    } 
    return $stmt->execute(); 

} 

Datenbankverbindung ist in Ordnung. Weil es auf SELECT- und DELETE-Abfragen funktioniert, aber keine INSERT- und UPDATE-Abfragen ausführt. Ich will keine Alternative, aber ich will, wo ist mein Fehler. Bitte helfen Sie mir. Ich versuche es 2 Tage lang zu lösen.

10 Windows-64-Bit-
WampServer 3.0.8
PHP 7.1
MySQL 5.7

+0

https://stackoverflow.com/questions/19221692/cannot-insert- in-mysql-database-using-pdo-no-errors –

+0

Gleicher Fehler, aber nicht behoben. –

Antwort

1

Sie müssen bindValue() statt bindParam(). Ändern Sie foreach-Schleife zu

foreach ($data as $key => $value) { 
     $stmt->bindValue(':'.$key, $value); 
    } 

Siehe doc:

http://php.net/manual/en/pdostatement.bindvalue.php

Sehen Sie den Unterschied hier: What is the difference between bindParam and bindValue?

+0

Ich habe es versucht. Immer noch nicht funktioniert. –

+0

versuchen, Fehler 'print_r ($ stmt-> errorInfo());' nach dem Ausführen –

+0

Danke zu drucken. Das Problem ist gelöst. Es wird bindValue() sein. –