{"id":2080,"date":"2012-09-17T15:58:56","date_gmt":"2012-09-17T13:58:56","guid":{"rendered":"http:\/\/www.palentino.es\/blog\/?p=2080"},"modified":"2012-09-17T16:05:07","modified_gmt":"2012-09-17T14:05:07","slug":"sqlite-en-php-bases-de-datos-incorporadas","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/sqlite-en-php-bases-de-datos-incorporadas\/","title":{"rendered":"SQLite en PHP, bases de datos incorporadas. Historia y ejemplo."},"content":{"rendered":"<p style=\"text-align: justify;\">Cuando<strong> D. Richard Hipp<\/strong> trabajaba desarrollando software para la fuerza naval de los Estados Unidos, comenz\u00f3 a desarrollar <strong>SQLite &#8230;<\/strong><\/p>\n<p><strong>&#8220;El proyecto SQLite surgi\u00f3 de una necesidad personal, para mi propio uso.&#8221;<\/strong><\/p>\n<p style=\"text-align: justify;\"><strong>SQLite<\/strong>\u00a0es un sistema de gesti\u00f3n de\u00a0<a title=\"Base de datos relacional\" href=\"http:\/\/es.wikipedia.org\/wiki\/Base_de_datos_relacional\">bases de datos relacional<\/a>\u00a0compatible con\u00a0<a title=\"ACID\" href=\"http:\/\/es.wikipedia.org\/wiki\/ACID\">ACID<\/a>, contenida en una relativamente peque\u00f1a (~275\u00a0<a title=\"Kibibyte\" href=\"http:\/\/es.wikipedia.org\/wiki\/Kibibyte\">kiB<\/a>)<span style=\"font-size: 11px;\">\u00a0<\/span>\u00a0<a title=\"Biblioteca (inform\u00e1tica)\" href=\"http:\/\/es.wikipedia.org\/wiki\/Biblioteca_(inform%C3%A1tica)\">biblioteca<\/a>\u00a0escrita en\u00a0<a title=\"Lenguaje de programaci\u00f3n C\" href=\"http:\/\/es.wikipedia.org\/wiki\/Lenguaje_de_programaci%C3%B3n_C\">C<\/a>.<\/p>\n<p style=\"text-align: justify;\">SQLite es un proyecto de\u00a0<a title=\"Dominio p\u00fablico\" href=\"http:\/\/es.wikipedia.org\/wiki\/Dominio_p%C3%BAblico\">dominio p\u00fablico<\/a>.<\/p>\n<p style=\"text-align: justify;\">Veamos algo de su Historia y alg\u00fan ejemplo &#8230;<\/p>\n<p style=\"text-align: justify;\"><!--more--><\/p>\n<p style=\"text-align: justify;\">En enero de 2000 D. Richard Hipp estaba trabajando con su equipo de la General Dynamics en la Fuerza naval de los Estados Unidos, en un proyecto de software, el cual se conectaba a una base de datos Informix, el motor funcionaba muy bien, pero hab\u00edan tenido problemas para hacer una reconfiguraci\u00f3n cuando el sistema se reiniciaba. Luego cambiaron a PostgreSQL, pero administrar la base de datos era un poco m\u00e1s complejo. Fue en ese momento cuando surgi\u00f3 la idea de escribir un simple motor de base de datos SQL que permitiera leer los archivos del disco duro, y luego ser llamados en diferentes solicitudes.<\/p>\n<p style=\"text-align: justify;\">Cinco meses m\u00e1s tarde comenz\u00f3 a escribir las primeras versiones de lo que hoy conocemos como SQLite, con el pensamiento de que ser\u00eda \u00fatil en alg\u00fan problema similar.<\/p>\n<p style=\"text-align: justify;\">Razones de su uso como herramienta de desarrollo:<\/p>\n<ul>\n<li><strong>Tama\u00f1o<\/strong>: SQLite tiene una peque\u00f1a memoria y una \u00fanica biblioteca es necesaria para acceder a bases de datos, lo que lo hace ideal para aplicaciones de bases de datos incorporadas.<\/li>\n<li><strong>Portabilidad<\/strong>: se ejecuta en muchas plataformas y sus bases de datos pueden ser f\u00e1cilmente portadas sin ninguna configuraci\u00f3n o administraci\u00f3n.<\/li>\n<li><strong>Estabilidad<\/strong>: SQLite es compatible con ACID, reuni\u00f3n de los cuatro criterios de Atomicidad, Consistencia, Aislamiento y Durabilidad.<\/li>\n<li><strong>SQL<\/strong>: implementa un gran subconjunto de la ANSI \u2013 92 SQL est\u00e1ndar, incluyendo sub-consultas, generaci\u00f3n de usuarios, vistas y triggers.<\/li>\n<li><strong>Interfaces<\/strong>: cuenta con diferentes interfaces del API, las cuales permiten trabajar con C++, PHP, Perl, Python, Ruby, Tcl, groovy, etc.<\/li>\n<li><strong>Costo<\/strong>: SQLite es de dominio p\u00fablico, y por tanto, es libre de utilizar para cualquier prop\u00f3sito sin costo y se puede redistribuir libremente<\/li>\n<\/ul>\n<p>En la versi\u00f3n 4 de PHP, SQLite se pod\u00eda utilizar como base de datos instalando un m\u00f3dulo PECL.<\/p>\n<p style=\"text-align: justify;\">A partir de la <strong>versi\u00f3n 5 de PHP<\/strong>, <strong>SQLite est\u00e1 incluido en PHP<\/strong>, por lo que est\u00e1 disponible sin necesidad de realizar ninguna instalaci\u00f3n adicional.<\/p>\n<p style=\"text-align: justify;\">Los nombres de las funciones de php que permiten utilizar SQLite en PHP empiezan por sqlite_ y son similares a los que permiten acceder otras bases de datos utilizables desde PHP (mysql, postgresql, etc).<\/p>\n<p>El manual de PHP incluye un cap\u00edtulo dedicado a SQLite.<\/p>\n<p>Ejemplo de versi\u00f3n:<\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\nprint \"&lt;p&gt;Versi\u00f3n PHP: \".phpversion().\"&lt;\/p&gt;\";\r\nprint \"&lt;p&gt;Versi\u00f3n SQLite: \".sqlite_libversion().\"&lt;\/p&gt;\";\r\nprint \"&lt;p&gt;Codificaci\u00f3n: \".sqlite_libencoding().\"&lt;\/p&gt;\";\r\n?&gt;<\/pre>\n<p style=\"text-align: justify;\">En el ejemplo siguiente, la variable $caminodb almacena la ruta donde se encuentra la base de datos y la variable $db el manejador de la base de datos.<\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\n$caminodb = $_SERVER['DOCUMENT_ROOT'].\"db\\\\prueba01.db\";\r\n$db = sqlite_open($caminodb) or die(\"No puedo abrir la base de datos \");\r\n?&gt;<\/pre>\n<p><strong>Crear una tabla:<\/strong><\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\nsqlite_query($db, \"CREATE TABLE personas(id INTEGER PRIMARY KEY, nombre, apellidos)\");\r\n?&gt;<\/pre>\n<p><strong>Borrar una tabla:<\/strong><\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\nsqlite_query($db, \"DROP TABLE personas\");\r\n?&gt;<\/pre>\n<p><strong>A\u00f1adir registros:<\/strong><\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\nsqlite_query($db, \"INSERT INTO personas values (NULL , 'Oscar' , 'de la cuesta')\" );\r\n?&gt;<\/pre>\n<p><strong>Insertar texto<\/strong><\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\n$apellido = ($_REQUEST['apellido'] == \"\") ? \"\" : sqlite_escape_string($_REQUEST['apellido']);\r\nsqlite_query($db, \"INSERT INTO personas values (NULL, 'de la Cuesta' , '$apellido')\" );\r\n?&gt;<\/pre>\n<p><strong>Modificar registros:<\/strong><\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\nsqlite_query($db, \"UPDATE personas SET nombre = 'Oscar', apellidos = 'de la cuesta' WHERE id = '4'\");\r\n?&gt;<\/pre>\n<p><strong>Borrar un registro<\/strong><\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\nsqlite_query($db, \"DELETE FROM personas WHERE id = '1'\");\r\n?&gt;<\/pre>\n<p><strong>Consultar una tabla:<\/strong><\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\n$resultado = sqlite_array_query($db, \"SELECT * FROM personas ORDER BY apellidos DESC\", SQLITE_ASSOC);\r\n?&gt;<\/pre>\n<p>M\u00e1s informaci\u00f3n:\u00a0<a href=\"http:\/\/es.wikipedia.org\/wiki\/SQLite\">http:\/\/es.wikipedia.org\/wiki\/SQLite<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cuando D. Richard Hipp trabajaba desarrollando software para la fuerza naval de los Estados Unidos, comenz\u00f3 a desarrollar SQLite &#8230; &#8220;El proyecto SQLite surgi\u00f3 de una necesidad personal, para mi propio uso.&#8221; SQLite\u00a0es un sistema de gesti\u00f3n de\u00a0bases de datos relacional\u00a0compatible con\u00a0ACID, contenida en una relativamente peque\u00f1a (~275\u00a0kiB)\u00a0\u00a0biblioteca\u00a0escrita en\u00a0C. SQLite es un proyecto de\u00a0dominio p\u00fablico. Veamos algo de su Historia y alg\u00fan ejemplo &#8230;<\/p>\n","protected":false},"author":1,"featured_media":2089,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40,5],"tags":[667,44,39,224],"class_list":["post-2080","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bases-de-datos","category-programacion","tag-php","tag-programacion-2","tag-sql","tag-sqllite"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/2080","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=2080"}],"version-history":[{"count":15,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/2080\/revisions"}],"predecessor-version":[{"id":2102,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/2080\/revisions\/2102"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/2089"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=2080"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=2080"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=2080"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}