2009-07-24 13 views
9

Tengo problemas para insertar en una base de datos sqlite3 con pdo. Tendrás que disculpar mi ignorancia con PDO, parece tan extraño viniendo de la interfaz de la base de datos de Python.¿Cómo lo inserto en PDO (sqllite3)?

Así que aquí está mi problema. Tengo un simple 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; 

Simplemente quiero ejecutar ese comando SQL en mi base de datos y terminarlo. Aunque la ejecución de esta secuencia de comandos no causa errores, nunca actualiza la base de datos. Intenté todo tipo de permisos en la base de datos, incluso lo hice en 777 pero no hace la diferencia.

¿Alguien podría ayudarme?

+0

tan una nota al margen (podría no estar relacionada con su problema), ¿ha pensado en escapar de los datos que está inyectando en la consulta? (ver PDO :: cita); o usando declaraciones preparadas (vea PDO :: prepare + PDO :: execute). ¿Intentó verificar que no hubo un error de SQL? (vea http://php.net/manual/fr/pdo.errorinfo.php) –

+0

¿Ha tenido otras consultas exitosas con el adaptador PDO sqlite? – sixthgear

+0

Además, parece que no tiene comillas en su instrucción de SQL que rodea cada valor. (A menos, por supuesto, las citas están contenidas en cada variable) – sixthgear

Respuesta

21

Uno de los grandes beneficios de PDO es que puede crear declaraciones preparadas. Aquí hay un código de un proyecto PHP mío:

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

Como se puede ver, yo uso ? donde quiero insertar un valor, entonces ejecutar la consulta con una serie de valores que se deben poner en su lugar de los signos de interrogación.

Si hace esto, su consulta será mucho más seguro y más propensos a trabajar (desde un valor faltante se detendría la consulta de trabajar si inserta las variables directamente en la consulta como lo hace.)

+0

Muchas gracias por aclarar esto para mí. Realmente no entendí estas declaraciones preparadas. ¡Gracias! – kodai

+0

Nunca puedo recordar por qué exige que los parámetros se envuelvan en una matriz() (¡incluso para un param!). ¿Por qué no simplemente aceptar una lista de parámetros? –

+1

Buena pregunta ... Es más probable que se admita/se comporte como la biblioteca subyacente para PDO. Definitivamente es posible, ya que PHP admite una cantidad variable de argumentos. Puede hacer su propia subclase con un 'execute' que llame a' parent :: execute (func_get_args()) ' – Blixt

2

Puede tener un error en su consulta SQL. Puede imprimirlo y luego intentar ejecutarlo en alguna interfaz GUI SQLite como 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; 

Veo que no está ajustando sus valores entre comillas, probablemente ese sea el origen del problema. Tal vez algunos errores tipográficos en los nombres de los campos de tabla también. Todos saldrán una vez que realmente veas la consulta.

+1

Tenías razón, me olvidaba de citar mis datos. Gracias. – kodai

Cuestiones relacionadas