2009-07-24 14 views
9

SQL ile bir sqlite3 veritabanına eklemekte biraz sorun yaşıyorum. Cehaletimi PDO ile bahane etmeniz gerekecek, Python'un veritabanı arayüzünden çok yabancı görünüyor.PDO'ya nasıl ekleyebilirim (sqllite3)?

İşte benim sorunum. Basit bir ekim var:

$dbh = new PDO('sqlite:vets.db'); 
    $count = $dbh->exec("INSERT INTO vets(name,email,clinic,streetname,citystatezip,link,phone,fax,animal,region,visible) VALUES ($name,$email,$clinic,$streetname,$citystatezip,$link,$phone,$fax,$animal,$region,$visible)"); 
    $dbh = null; 

Sadece SQL komutunu veritabanımda yürütmek ve bununla birlikte yapmak istiyorum. Bu betiği yürütmek hataya neden olmamasına rağmen, veritabanını hiçbir zaman güncelleştirmez. Veritabanındaki her türlü izni denedim, hatta 777 yaptık ama fark yaratmıyor.

Birisi bana yardımcı olabilir mi?

+0

tıpkı Bir sidenote (sorununuzla ilgili olmayabilir), sorguya enjekte ettiğiniz verilerden kaçmayı düşündünüz mü? (PDO'ya bakınız :: alıntı); veya hazırlanmış ifadeler kullanarak (PDO :: prepare + PDO :: execute bölümüne bakınız). SQL hatası olmadığını kontrol ettiniz mi? (Bkz. http://php.net/manual/fr/pdo.errorinfo.php) –

+0

PDO sqlite adaptörüyle başka başarılı sorularınız oldu mu? – sixthgear

+0

Ayrıca, SQL deyiminizde her değeri çevreleyen hiçbir alıntı işareti bulunmuyor. (Tabii ki her değişkende alıntılar bulunmuyorsa) – sixthgear

cevap

21

PDO'nun en büyük avantajlarından biri, hazırlanmış ifadeler oluşturabilmenizdir. İşte benim bir PHP projesinden bazı kod: Gördüğünüz gibi ben bir değeri eklemek istediğiniz yere

$qry = $db->prepare(
    'INSERT INTO twocents (path, name, message) VALUES (?, ?, ?)'); 
$qry->execute(array($path, $name, $message)); 

, ben ? kullanmak, sonra ben yerine konmalıdır değerler dizisi ile sorgu yürütmek soru işaretleri Bunu yaparsanız

, sorgu çok daha güvenli ve çalışmaya olasılığı artacaktır (eksik değer senin gibi sorguda doğrudan değişkenleri eklerseniz çalışmasını Sorgunuzla durdurmak olacağından.)

+0

Bunu benim için temizlediğin için çok teşekkür ederim. Bu Hazırlanan ifadeleri gerçekten anlamadım. Teşekkür ederim! – kodai

+0

Niçin parametrelerin bir diziye() ekleneceğini (bir param için bile!) Neden hatırlayamıyorum. Neden sadece parametre listesini kabul etmiyoruz? –

+1

İyi soru ... PDO için temel kütüphane gibi destek/davranma olasılığı yüksektir. PHP, değişken sayıda argümanı desteklediği için kesinlikle mümkündür. Kendi alt sınıfınızı "execute" işleviyle "parent :: execute (func_get_args())" – Blixt

2

SQL sorgunuzda bir hata olabilir. Bunu yazdırabilir ve daha sonra SQLite Database Browser gibi bazı SQLite GUI arayüzünde çalıştırmayı deneyebilirsiniz.

// you can skip PDO part for now, because we know it doesn't work 
// $dbh = new PDO('sqlite:vets.db'); 
$query = "INSERT INTO vets(name,email,clinic,streetname,citystatezip,link,phone,fax,animal,region,visible) VALUES ($name,$email,$clinic,$streetname,$citystatezip,$link,$phone,$fax,$animal,$region,$visible)"; 
echo $query; 
// $count = $dbh->exec($query); 
// $dbh = null; 

Muhtemelen bunu sorunun kaynağı, sen tırnak içinde değerlerini sarma olmadığını görüyoruz. Belki tablo alanındaki bazı yazım hataları da. Sorguyu gerçekten gördüğünüzde hepsi çıkacaktır.

+1

Haklıydın, verilerimi alıntılamayı unutuyordum. Teşekkür ederim. – kodai

İlgili konular