2009-07-24 10 views
9

Sto avendo un po 'di problemi nell'inserimento in un database sqlite3 con pdo. Dovrai scusare la mia ignoranza con il PDO, sembra così estraneo proveniente dall'interfaccia del database di Python.Come inserisco in PDO (sqllite3)?

Quindi ecco il mio problema. Ho un semplice inserto:

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

ho semplicemente desidera eseguire quel comando SQL sul mio database e da fare con esso. Sebbene l'esecuzione di questo script non causi errori, non aggiorna mai il database. Ho provato tutti i tipi di permessi sul database stesso, anche se ho fatto 777 ma non fa differenza.

Qualcuno potrebbe aiutarmi?

+0

altrettanto un sidenote (potrebbe non essere correlato al tuo problema), hai pensato di sfuggire ai dati che stai iniettando nella query? (vedi DOP :: citazione); o usando istruzioni preparate (vedi PDO :: prepare + PDO :: execute). Hai provato a verificare che non ci fosse un errore SQL? (vedi http://php.net/manual/fr/pdo.errorinfo.php) –

+0

Hai avuto altre query di successo con l'adattatore sqlite PDO? – sixthgear

+0

Inoltre, non sono presenti virgolette nella dichiarazione SQL che circonda ogni valore. (A meno che le virgolette non siano contenute in ciascuna variabile) – sixthgear

risposta

21

Uno dei grandi vantaggi di DOP è la possibilità di creare istruzioni preparate. Ecco po 'di codice da un progetto PHP mio:

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

Come potete vedere, io uso ? dove voglio inserire un valore, quindi eseguo la query con una serie di valori che dovrebbe essere messo in atto di i punti interrogativi.

Se si esegue questa operazione, la query sarà molto più sicuro, e più probabilità di lavorare (in quanto un valore mancante sarebbe fermata la query da lavorare se si inserisce variabili direttamente nella query come si fa.)

+0

Grazie mille per aver sistemato tutto per me. Non ho davvero capito queste dichiarazioni preparate. Grazie! – kodai

+0

Non riesco mai a ricordare perché richiede che i parametri siano racchiusi in un array() (anche per un parametro!). Perché non accettare solo un elenco di parametri? –

+1

Buona domanda ... È più probabile che supporti/si comporti come la libreria sottostante per PDO. È sicuramente possibile, dal momento che PHP supporta un numero variabile di argomenti. Potresti creare la tua sottoclasse con un 'execute' che chiama' parent :: execute (func_get_args()) ' – Blixt

2

È possibile che si verifichi un errore nella query SQL. È possibile stamparlo e quindi provare ad eseguirlo in alcune interfacce grafiche SQLite come SQLite Database Browser.

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

Vedo che non si stanno impacchettando i valori tra virgolette, probabilmente questa è la fonte del problema. Forse alcuni errori di battitura nei nomi dei campi della tabella. Tutto verrà fuori una volta che si vede effettivamente la query.

+1

Avevi ragione, mi stavo dimenticando di citare i miei dati. Grazie. – kodai