2009-08-10 28 views
2
$columns = "name, address, city, state, zip"; 
$values = "'$name', '$address', '$city', '$state', '$zip'"; 
$query = "insert into customer values ($values)"; 
$statement = $dbh->prepare($query); 
$statement->execute(); 

Also ich bin völlig neu dazu. Kindergarten Beispiele und Baby-Talk wird nicht beleidigend sein! :)PDO-Anweisung tut nichts?

Das Formular wird ohne Ergebnis und ohne Fehler ausgeführt.

Antwort

3

Zunächst einmal haben Sie völlig missverstandene Aussagen. :)

Hier ist, wie es getan werden sollte:

$query = "insert into customer (name, address, city, state, zip) values (?, ?, ?, ?, ?)"; 
$statement = $dbh->prepare($query); 
$statement->execute(array($name, $address, $city, $state, $zip)); 

Wie Sie sicher selbst sehen können, haben Sie nicht einmal Ihre $columns Variable in Ihrem Beispiel nutzen. Das sollte Teil der Abfrage sein.

Ihr zweiter Fehler war, dass Sie versucht haben, die Datenvariablen direkt in die Zeichenfolge zu interpolieren. Der ganze Sinn vorbereiteter Aussagen ist es, dies zu vermeiden. Stattdessen verwenden Sie Platzhalter (in diesem Fall das Zeichen?). PDO wird, wenn Sie die Platzhalter für die tatsächlichen Variablen in der gleichen Reihenfolge ersetzen, die Sie bereitstellen. Dazu werden sie als Parameter für die Anweisung execute an ein PDO gesendet, wobei ein Array verwendet wird.

Dies ist der alten Methode, die vollständige Abfrage als String zu erstellen, weit überlegen, da sie alle Sicherheitsrisiken beseitigt. Die Sicherheitslücken, die beim Erstellen einer Abfrage entstehen, sind sehr real und wahrscheinlich die häufigste Sicherheitslücke im Internet. Versuchen Sie nach SQL Injection zu suchen, wenn Sie mehr wissen möchten.

Der Grund, warum Sie keinen Fehler erhalten, liegt wahrscheinlich daran, dass Sie den Fehlermeldungsmechanismus nicht eingestellt haben. Versuchen Sie, dies nach dem Anschließen hinzuzufügen:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
+0

Ehrfürchtig. Danke für die Hilfe! Erstaunlich, dass mein Buch im September 2008 und Lynda.com die PDO-Informationen völlig übertrumpfen. Wäre es möglich, auch die letzte Zeile in $ statement-> execute ($ values) zu ändern; ? Es sieht so aus, als könnte es so nah an der Einrichtung als Funktion sein? –

+0

Nein, $ Werte funktionieren nicht, da es sich um eine Zeichenfolge handelt. Der execute-Parameter muss ein Array sein. Es gibt keinen Grund, dass Sie das Array nicht in einer Variablen speichern können, bevor Sie es an execute() senden. –

4

Versuchen Sie es. (Es gibt viele Möglichkeiten, dies zu tun)

$sql = "INSERT INTO customer (name,address,city,state,zip) VALUES (:name,:address,:city:,state,:zip)"; 

$sth = $dbh->prepare($sql); 
$sth->execute(array(
    ':name' => $name, 
    ':address' => $address, 
    ':city' => $city, 
    ':state' => $state, 
    ':zip' => $zip 
));