Tema: fileSQL
Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/09/2004, 20:15
Kurapica_chan
 
Fecha de Ingreso: septiembre-2004
Mensajes: 55
Antigüedad: 19 años, 7 meses
Puntos: 0
Mria noe s que sea malo es ue ya lo e leido trae un ejemplo y habla ques es muy similar a Mysql y no es SQlita es fileSQL

Aqui el manual

¿Qué es?
Todos sabemos lo aburrido que es manejar archivos de texto para guardar informacion: ( Usuarios online, contadores de visitas...)
Y más aún si tenemos que insertar, extraer, actualizar o manipular de cualquier forma dicha información.

FileSQL es un grupo de funciones que nos permitirán trabajar con archivos de texto mediante queries similares a los que haríamos a una base de datos como por ejemplo mySQL. De esta forma podremos aplicar cláusulas INSERT para insertar datos, UPDATE para actualizar, DELETE para borrar o SELECT para seleccionar determinados datos de nuestros archivos de texto.

La idea es muy simple: Un directorio sería pues una base de datos. Cada archivo de ese directorio sería una tabla, y en ese archivo habría datos separados por ":" cada uno de ellos sería un campo.

Sobre estos archivos podremos ejecutar los queries y manejar los resultados con las funciones equivalentes a mysql_*. Es decir: mysql_fetch_array seria file_fetch_array. Aparte tenemos file_query, file_num_rows, file_fetch_row, file_connect, file_close; y una funcion especial importSQL para importar los archivos .sql de phpmyadmin directamente al sistema fileSQL.
¿Cómo funciona?
Para hacer funcionar fileSQL solo has de incluir el archivo fileSQL.php en tu script, y ya podrás empezar a manejar los datos de tus archivos.
Debes crear un directorio nuevo con todos los permisos (su nombre sería el nombre de la bd). Dentro de ellos puedes crear los archivos de texto que quieras. Sin embargo para que fileSQL funcione ha de haber un archivo especial en cada directorio que él maneje llamado "fields.fql" donde se encuentra la definicion de los campos:

Se ve mejor con un ejemplo:

Contenido de fields.fql:

# Archivo de campos de fileSQL
# Formato:
# archivo:campo1:campo2:campo3...
# Ejemplo:
# login.txt:nick:password:fecha

usuarios.txt:nick:password:timestamp
noticias.txt:autor:titulo:texto:fecha




En este archivo se dice que tenemos 2 archivos de texto, noticias.txt y usuarios.txt con los campos que se dicen a continuacion separados por ":". El contenido de usuarios.txt podria ser el siguiente:

Zerberus:Ax5visi0n:1087423944
thessoro:s3cr3t0:1084582347
Aeoris:mipassword:1073452348
spezial:n0sp00n:1086227216


Al igual, tendría que existir otro archivo llamado noticias.txt con el orden de campos declarado previamente en fields.fql
Ejemplo de uso:

Código:
<?php

include ("fileSQL.php");

// conectamos al directorio (notad el / final)
// el directorio ha de tener permisos de escritura y lectura

$conexion = file_connect("./files/");

//$query = "INSERT INTO archivo.txt (campo1,campo2,campo3) VALUES ('valor1','valor2','valor3')";
//$query = "INSERT INTO archivo.txt VALUES ('valor1','valor2','valor3','valor4')";
//$query = "DELETE FROM archivo.txt WHERE campo1 = 'valor' AND campo2 = 'valor2'";
//$query = "UPDATE archivo.txt set campo1='valor1', campo2='valor2', campo3='valor3' WHERE campo1 LIKE 'A%' AND campo2 <= 35";

//file_query($query,$conexion);

//$query = "SELECT * from archivo.txt";
//$query = "SELECT * from archivo.txt ORDER BY RAND()";
//$query = "SELECT campo1,campo2 from archivo.txt WHERE (campo1 LIKE '%valor%' OR (campo2 < '3' AND campo2 = 'valor2) ORDER BY RAND() LIMIT 10";
//$query = "SELECT campo3 FROM archivo.txt ORDER BY campo1 DESC limit 2,3";

// equivalente a mysql_query, devuelve un identificador de resultado.

$result_id = file_query($query,$conexion);

echo "Numero de resultados : ".file_num_rows($result_id); // devuelve el numero de resultados


// bucle para mostrar todos los resultados. file_fetch_array o file_fetch_row (sin claves asociativas)
echo '<table>';

while ($datos = file_fetch_array($result_id)) {

    echo '<tr><td>'.$datos['campo1'].'</td><td>'.$datos['campo2'].'</td></tr>';
}

echo '</table>';

file_close($conexion);

?>


Limitaciones de fileSQL:
Obviamente muchas, fileSQL no pretende sustituir a una base de datos compleja como mySQL (por ejemplo).

No se puede ordenar por más de un campo a la vez: ORDER BY campo1 ASC, campo2 DESC <- No funcionará

Nada de seleccionar en múltiples tablas: SELECT * from tabla1,tabla2 <- No funcionará

La única función propia de MySQL que funciona es RAND() -> ORDER BY RAND()
Otras como COUNT(*), MAX(campo), DATE_FORMAT... <- no funcionarán, para contar resultados podeis usar file_num_rows

Las condiciones son bastante flexibles y pueden ser lo complejas que se quiera
WHERE (campo1 ='valor' OR (campo1 like '%valor%' AND (campo3 != 'pepe' OR campo3 != 'luis))) ORDER... LIMIT...
Sin embargo:
El único comodín que funciona en la cláusula LIKE es '%'
LIKE '%a%' LIKE '%a' LIKE 'a%' (o LIKE 'a' simplemente)


La sentencia CREATE está por terminar, hasta ese momento, importSQL sólo funciona con un .sql con datos, y no con la estructura de las tablas (La tabla ha de estar previamente definida)

OJO. FileSQL es case-insensitive por defecto: WHERE campo1='pepe' no coincidirá con PEPE (MySQL si). Usa WHERE campo1 LIKE 'pepe' en su lugar

Operaciones matemáticas directamente sobre los campos no funcionan de momento (lo hará). UPDATE tabla set campo=campo+1 <- No funcionará

Más limitaciones que no se me ocurren en este momento xD

Créditos
Se ha querido dar bastante flexibilidad en la sintaxis de los queries (espacios, sin espacios, con o sin comillas, cláusulas no sensibles a mayúsculas o minúsculas) y el número de queries que se pueden realizar en este momento es infinito. Por ello las tareas de debug fueron de vital importancia para detectar fallos y problemas (que seguirá habiendo, es inevitable. Por favor, reportadlos) en los queries.
Debug: spezial. (Gracias por su debug exhaustivo)

Debug: Aeoris ¬¬' bueno, algo hizo

Idea y programación: thessoro


Lo que queria ene ste post era saber si alguien tenia alguna nocion y nos pudiera explicar un pokito como funciona.
__________________
Proximamente Rincon Ota on line.