2017-07-10 6 views
0

Ich habe ein Problem hier, wo ich die Daten in CRUD aktualisieren möchten, die Daten sogar neu hinzufügen (wie einfügen).PDO Mysql, möchte sogar die Daten EINFÜGEN

Haben Sie eine Idee, es zu lösen? Vielen Dank.

Es ist mein Code,

if ($valid) { 
     $pdo = Database::connect(); 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $sql = "UPDATE customers 
       SET name = ?, email = ?, address = ? 
       WHERE id = ?"; 
     $q = $pdo->prepare($sql); 
     $q->execute(array($name,$email,$address)); 
     Database::disconnect(); 
     header("Location: index.php"); 
    } 
    }else { 
    $pdo = Database::connect(); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $sql = "SELECT * FROM customers WHERE id = ?"; 
    $q = $pdo->prepare($sql); 
    $q->execute(array($id)); 
    $data = $q->fetch(PDO::FETCH_ASSOC); 
    $name = $data['name']; 
    $email = $data['email']; 
    $address = $data['address']; 
    Database::disconnect(); 
    } 
+2

wo binden Sie den 4. Parameter? Sie haben 4 Fragezeichen in der Abfrage, und nur 3 Elemente in Ihrem Array bei der Ausführung –

+0

haben Sie "neue PDO (" Anweisung noch? Oder sind Sie sicher von Database :: connect(), weil ich diese Syntax nie gesehen habe vor – user10089632

+0

Seine 'ID' sollte auch in Elementen sein? – pranatayudha

Antwort

2

Bindung ID als auch in der vorbereiteten Anweisung

if ($valid) { 
     $pdo = Database::connect(); 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $values = array($name,$email,$address); 
     if($id) { 
      $sql = "UPDATE customers 
        SET name = ?, email = ?, address = ? 
        WHERE id = ?"; 
      $values[] = $id; 
     } else { 
      $sql = "INSERT INTO customers (name, email, address) 
        VALUES (?,?,?)"; 
     } 
     $q = $pdo->prepare($sql); 
     $q->execute($values); 
     Database::disconnect(); 
     header("Location: index.php"); 
    } 
    }else { 
    $pdo = Database::connect(); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $sql = "SELECT * FROM customers WHERE id = ?"; 
    $q = $pdo->prepare($sql); 
    $q->execute(array($id)); 
    $data = $q->fetch(PDO::FETCH_ASSOC); 
    $name = $data['name']; 
    $email = $data['email']; 
    $address = $data['address']; 
    Database::disconnect(); 
    } 

Siehe Linie 8 (lassen Sie den **)

bearbeiten hinzugefügt eine Einfügeabfrage für den Fall $ id ist leer basierend auf dem Verständnis eines Kommentars

+0

Manchmal ist es am besten, nur die fragliche Zeile einzuschließen wenn alles andere unverändert ist – tadman

+0

funktioniert nicht, Alter :( – pranatayudha

+0

irgendwelche Fehlermeldungen? Falsche Abfrage ausgeführt? Sie sollten mo geben Re-Feedback als "nicht funktioniert" das Problem gelöst haben. –

0

Anzahl der gebundenen Variablen Anzahl von Token nicht

$sql = "UPDATE customers 
     SET name = ?, email = ?, address = ? 
     WHERE id = ?"; 
$q = $pdo->prepare($sql); 
$q->execute(array($name,$email,$address)); 

Sie haben vier Token Vorstellungen? sollte es vier Parameter, wie von:

$q->execute(array($name,$email,$address,$id)); 

und nicht darauf geachtet header("Location: index.php"); in der gleichen Datei wie index.php, denn das wird Zyklus gesetzt, und Sie werden einen Fehler wie erhalten:

Ihre Webhost umgeleitet Sie zu oft