PDO Bildirimi hiçbir şey yok?

2 Cevap php
$columns = "name, address, city, state, zip";
$values = "'$name', '$address', '$city', '$state', '$zip'";
$query = "insert into customer values ($values)";
$statement = $dbh->prepare($query);
$statement->execute();

Yani bu tamamen yeni duyuyorum. Anaokulu örnekler ve bebek konuşma saldırgan olmayacak! :)

Form hiçbir sonuç ve hiçbir hata ile yürütür.

2 Cevap

Her şeyden önce, tamamen missunderstood ifadeleri var. :)

Burada yapılması gerektiğini nasıl:

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

Hiç şüphe kendinizi görebileceğiniz gibi, hatta örnekte sizin $columns değişkeni kullanmak vermedi. Bu sorgunun parçası olmalıdır.

Sizin ikinci hata doğrudan dizeye veri değişkenleri sokmak için çalıştı oldu. Hazırlanan tabloların tamamı nokta kaçınmaktır. Bunun yerine tutucuları (bu durumda? Karakter) kullanın. PDO yerine aynı sırayla gerçek değişkenler için yer tutucuları bunları sağlayacak zaman. Bu bir dizi kullanarak çalıştırmak-deyimi için bir parametre olarak PDO onları göndererek yapılır.

Tüm güvenlik risklerini ortadan kaldırır, çünkü bu bir dize olarak tam sorgu bina eski yöntemin çok daha üstündür. Bir sorgu yaptım yol inşa kaynaklanan güvenlik açıkları çok gerçek ve muhtemelen internet üzerinde en yaygın güvenlik delik vardır. Daha fazla bilgi edinmek isterseniz "SQL injection" için arama yapmayı deneyin.

Eğer hata raporlama mekanizması set değil, çünkü bir hata alamadım nedeni muhtemelen. Bağladıktan sonra bu eklemeyi deneyin:

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

Bu deneyin. (Bunu yapmanın pek çok yolu vardır)

$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
));