SQLite y PHP

eXtreM3

Hola! Tengo una base de datos SQLite creada en un servidor al cual unicamente tengo acceso por FTP. Mediante una serie de pasos he podido instalar WordPress para desarrollar una web. Bien, mi pregunta es cómo puedo conectar php con una base de datos sqlite y realizar consultas y mostrar resultados.

Después de toda la mañana trasteando he conseguido que conecte bien con la base de datos con este código

$db = sqlite_open('nombre_bd', 0666, $sqliteerror);

El caso es que para obtener valores no hay manera, he probado lo típico:

$queryNoticias = sqlite_query($db, "SELECT * FROM wp_posts", SQLITE_ASSOC);

y después

while($row = sqlite_fetch_array($queryNoticias)){
	echo $row['post_title'];
}

Pero no pinta nada, cómo se hacen las consultas???

Información adicional: no puedo crear una base de datos mysql ni es posible tener acceso al hosting. Entonces bien, olvidemos todo lo del WordPress ya que casi no tiene nada que ver, simplemente utilizo la base de datos para guardar info.

RPV: quiero obtener datos de una base de datos SQLite con php.

Gracias!

BLZKZ

todos mis males desaparecieron con http://php.net/manual/es/book.pdo.php :) para cualquier bbdd xD

Ademas concretamente para sqlite http://php.net/manual/es/ref.pdo-sqlite.php

1 respuesta
bLero

depende de la versión de la BBDD de SQLite tienes que usar una API u otra.

Si la versión de tu BBDD es de la 3 en adelante necesitas usar http://php.net/manual/es/book.sqlite3.php disponible a partir de PHP 5.3.8

Si la versión de tu BBDD es inferior debería funcionarte lo que has puesto.

1 respuesta
eXtreM3

#2 de hecho, uno de los pasos para instalar wordpress era bajar la última versión del plugin PDO y seguir las instrucciones, pero ni papa de lo que es, mañana me leeré esa documentación a ver si saco algo en claro.

#3 supongo que será la versión 3+ , lo que puse en #1 no me devuelve ningún dato :P

Mañana comento sí he conseguido sacar datos, gracias a los dos ;)

EDIT: supuestamente este código me debería funcionar

<?php
$bd = new SQLite3('mibdsqlite.db');

$results = $bd->query('SELECT bar FROM foo');
while ($row = $results->fetchArray()) {
    var_dump($row);
}
?>
eXtreM3

Vale, el código ese me ha funcionado para conectar bien con la base de datos y crear las consultas. Una dudilla mas: supongo que igual que he hecho en el servidor, puedo crear una base de datos SQLite en local para hacer las pruebas no? Puede que parezca una gilipollez de pregunta y la respuesta sea un SÍ como un templo, pero como nunca he trabajado con este tipo de base de datos... espero no tener más problemas.

BLZKZ

Si xD

PandragoQ

Yo evitaria usar SQLite para cualquier cosa que pueda tener algo de concurrencia, mas de 100K hits al dia. Sencillamente, el rendimiento de SQLite en concurrencia es de juguete.

1 respuesta
HeXaN

#7 La gente también decía que es fundamental usar NoSQL en sistemas grandes y mira Twitter...

2 respuestas
Soltrac

#8 No compares, el programa que usé para las votaciones de Bankia usaba la BB.DD. en Sqlite y era concurrente en muchos threads y obviamente no estaba preparado, se notaba, pero es q a mi me daba igual y necesitaba algo portable. Y te hablo de threads en decenas-centenas, no te hablo de miles.

Cada cosa a la suyo.

PandragoQ

#8 y que tendra que ver el tocino con la velocidad.... yo lo que he dicho es que SQLite, para cualquier cualquier cosa medianita, se queda corto.

Y, sinceramente, lo que diga "la gente", me importa mas bien poco... usar una base de datos relacional o no usarla no es por una cuestion de rendimiento, es por una cuestion de tu modelo de datos. Usar NoSQL para un modelo fuertemente relacionado, como twitter, es tan absurdo como usar SQL para un modelo basado en documentos, como 4square.

Tambien la gente dice que es cojonudo eso de usar la nube para poner tus servicios, y yo te dire que es un error tan grande como hacer outsourcing del desarrollo de tus aplicaciones.

Volviendo al tema... #1, Si ves que empiezas a tener un cuello de botella en el archivito de marras que usas como DB... hay algunos trucos de configuracion, como deshabilitar el journaling (o pasarlo a RAM), o desactivar el chequeo de escritura a disco, delegando esta tarea al OS que pueden aumentar drasticamente el rendimiento, a costa de ser un poquito mas peligroso si se te cuelga la maquina de golpe. Mira por ahi en google, era algo como pragma mode, o pragmatic journal....

1 respuesta
eXtreM3

#10 gracias, lo miraré si empieza a ir lento el sistema, pero no creo, esa base de datos no va a crecer mucho. No llegará ni a 1.000 tuplas en un año (eso es bastante poco no? xD)

1 respuesta
B

#1 mirate php active record, facil rápido y para toda la familia.

http://www.phpactiverecord.org/

PandragoQ

#11 eso no es nada..... pero vamos, que solo con 3 visitas al dia, ya estas en 1.000 al anyo, si usas jetpack para mantener el tracking de visitas.

1 respuesta
eXtreM3

#13 estamos confundiendo cosas (o al menos yo). Tú estás hablando de número de consultas a la base de datos o de número de inserciones? Yo digo que la web, los que la administren, entre unas cosas y otras no van a meter más de 1000 registros en un año, seguriiiiiisimo vaya.
Tampoco creo que sea una web que vaya a ser visitada masivamente, no creo que nunca haya más de 100 visitantes simultáneos... ilústrame :P

pd: si quereis citarme no pongais #1 que a #1 no llegan los quotes! xD

1 respuesta
PandragoQ

#14 con mil registros, te refieres a 1000 posts en el wordpress?? La base de datos recibe escrituras con cada comentario, con cada trackback, con cada visita (si usas algun plugin de estadisticas), ademas de por supuesto con cada post y pagina. Y hablamos de inserciones, no de consultas. Cada pagina que muestras, son varias consultas.

Y... 100 usuarios concurrentes?? Tu has echado numeros?? Asi a ojo de buen cubero, para un blog que tenga una hora pico de 100 usuarios concurrentes, eso son unas 3000 visitas diarias. Con esos numeros, monta un mysql, por lo que mas quieras.... :P

1 respuesta
eXtreM3

#15 no creo ni que llegue a 100 usuarios diarios xD, pero bueno yo ya advertí que sqlite es para sistemas pequeños, si la web empieza a crecer en contenido y en visitas ya veremos lo que hacemos, no es mi problema ya que se negaron a contratar otro hosting y la única posibilidad que dieron es sqlite.

eXtreM3

Ummm... no consigo hacer la instalación en local, me da un error al empezar

Invalid or missing PDO Driver

Your PHP installation appears not to have the right PDO drivers loaded. These are required for this version of Wordpress and the type of database you have specified.

Y he hecho los mismos pasos que en el server, con la última versión del plugin PDO y tal... a ver si doy con el error.

EDIT: joder qué coñazo. Ahora en local tengo SQLite 2.8.17...

EDIT 2: por lo visto tengo que subir el WAMP... porque sqlite3 tampoco funciona con php 5.2, así que nada... miedo me da.

bLero

yo tuve que instalar en su día php 5.3.8 (o quizás superior) para que me funcionara bien, pero sin usar WAMP ni APPSERV ni nada. Apache a pelo y PHP configurándolos tu mismo.

Si lo haces en windows tendrás también el problema de que necesitas una versión de apache compilada en VC9 y ya no dan soporte, pero hay un foro por ahí donde lo puedes encontrar, o sinó lo compilas tu mismo.

Después de eso ya no deberías tener ningun problema

2 respuestas
eXtreM3

Bueno, ya he subido el php a la versión 5.3.10, pero esto sigue sin ir.

#18 Si lo haces en windows tendrás también el problema de que necesitas una versión de apache compilada en VC9 y ya no dan soporte, pero hay un foro por ahí donde lo puedes encontrar, o sinó lo compilas tu mismo.

No he entendido nada xD

1 respuesta
BLZKZ

#18 xampp para windows tiene PDO, al menos las ultiamas versiones, y en linux si no instalas apache del año la pera lo mismo, y lo se porque lo llevo usando un tiempo en ambos SO y en slack 13.37 no es que venga un php muy nuevo

1 respuesta
bLero

#19

Te dejo un extracto del manual de instalación de php en windows:

"Which version do I choose?

If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP

If you are using PHP with IIS you should use the VC9 versions of PHP

VC6 Versions are compiled with the legacy Visual Studio 6 compiler

VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability. The VC9 versions require you to have the Microsoft 2008 C++ Runtime (x86) or the Microsoft 2008 C++ Runtime (x64) installed

Do NOT use VC9 version with apache.org binaries

VC9 versions of Apache can be fetched at Apache Lounge. We use their binaries to build the Apache SAPIs."

Si miras en http://windows.php.net/download/ sólo te dan compilado el php para versiones VC9 a partir de la 5.3 por lo que necesitas una versión VC9 de php o compilar por tí mismo el código.

#20 con xampp nose, no he probado, pero por lo visto en su web (http://www.apachefriends.org/en/xampp-windows.html) también sería válido. Es otra posibilidad, aunque yo siempre prefiero instalar todo de 0 y sólo los módulos que me interesan.

1 respuesta
BLZKZ

#21 para esas se usa linux, de hecho es lo mejor dado que el 99,9% de hosting lowcost son servidores linux. En windows por comodidad uso xampp de apachefriends (las menos veces), en linux desde 0 lo instalo ofc

eXtreM3

SOLUCIONADO

No sé por qué no me funcionaba haciéndolo manual, pero se ha solucionado utilizando directamente el Quick Admin de WAMP. Activando las extensiones de php de pdo y sqlite3.

Menos mal, ya me estaba viendo ejecutándolo directamente sobre el servidor... :( xD

Usuarios habituales