2009-07-24 20 views
9

Ich habe ein bisschen Probleme beim Einfügen in eine SQLite3-Datenbank mit PDO. Sie müssen meine Ignoranz mit PDO entschuldigen, es scheint so fremd von Pythons Datenbank-Schnittstelle zu kommen.Wie füge ich in PDO (sqlite3) ein?

Also hier ist mein Problem. Ich habe eine einfache Einfügung:

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

Ich möchte einfach diesen SQL-Befehl auf meiner Datenbank ausführen und damit fertig sein. Obwohl das Ausführen dieses Skripts keine Fehler verursacht, wird die Datenbank nie aktualisiert. Ich habe alle Arten von Berechtigungen für die Datenbank selbst ausprobiert, sogar 777, aber es macht keinen Unterschied.

Kann mir jemand helfen?

+0

wie eine Nebenbemerkung (möglicherweise nicht im Zusammenhang mit Ihrem Problem), haben Sie darüber nachgedacht, die Daten zu umgehen, die Sie in die Abfrage injizieren? (siehe PDO :: Zitat); oder mit vorbereiteten Anweisungen (siehe PDO :: prepare + PDO :: execute). Haben Sie versucht, zu überprüfen, dass kein SQL-Fehler aufgetreten ist? (siehe http://php.net/manual/fr/pdo.errorinfo.php) –

+0

Hatten Sie weitere erfolgreiche Abfragen mit dem sqlite-PDO-Adapter? – sixthgear

+0

Außerdem haben Sie keine Anführungszeichen in Ihrer SQL-Anweisung, die jeden Wert umgibt. (Es sei denn natürlich die Zitate sind in jeder Variable enthalten) – sixthgear

Antwort

21

Einer der großen Vorteile von PDO ist, dass Sie vorbereitete Anweisungen erstellen können. Hier ist ein Code aus einem PHP-Projekt von mir:

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

Wie Sie sehen können, verwende ich ? wo ich einen Wert einfügen will, dann ausführen ich die Abfrage mit einer Reihe von Werten, die an Ort und Stelle gebracht werden sollen die Fragezeichen.

Wenn Sie das tun, Ihre Anfrage wird viel sicherer und wahrscheinlicher zu arbeiten (da ein fehlender Wert würde Ihre Abfrage von mehr funktionieren, wenn Sie Variablen direkt in die Abfrage einfügen wie Sie.)

+0

Vielen Dank für das Aufräumen für mich. Ich habe diese vorgefertigten Aussagen nicht wirklich verstanden. Vielen Dank! – kodai

+0

Ich kann mich nie erinnern, warum es erfordert, dass die Parameter in einem Array() (sogar für einen param!) Verpackt werden. Warum nicht einfach eine Liste von Parametern akzeptieren? –

+1

Gute Frage ... Es ist wahrscheinlich, dass es sich wie die zugrunde liegende Bibliothek für PDO verhält. Es ist definitiv möglich, da PHP eine variable Anzahl von Argumenten unterstützt. Sie können Ihre eigene Unterklasse mit einem 'execute' erstellen, das' parent :: execute (func_get_args()) '' – Blixt

2

Sie können einen Fehler in Ihrer SQL-Abfrage haben. Sie könnten es drucken und dann versuchen, es in einer SQLite GUI-Schnittstelle wie SQLite Database Browser auszuführen.

Ich sehe, dass Sie nicht Ihre Werte in Anführungszeichen verpacken, wahrscheinlich ist das die Ursache des Problems. Vielleicht auch ein paar Tippfehler in Tabellenfeldnamen. Alles wird herauskommen, sobald Sie die Abfrage tatsächlich sehen.

+1

Sie hatten Recht, ich habe vergessen, meine Daten zu zitieren. Vielen Dank. – kodai

Verwandte Themen