Tuesday 6 January 2015

Accessing a SQLite database table from PHP 5.4 upwards

Text in Courier is code to be typed literally
Text in Arial should be substituted for your own values 

<?php

try {
   $file = 'path/to/sqlfile.sl3';  // relative to the directory the php is in 
   $db = new PDO('sqlite:' . $file);  // new php db object, *not* a new db
 } 
catch(PDOException $pe) {
   echo $pe->getMessage();
   exit(0);
 }

try {
   $result = $db->query('SELECT field1,field2,field3,etc FROM table');
   echo '<table>' . "\r\n";
   echo "<tr><th>field1 name</th><th>field2 name</th><th>field3 name</th></tr>\n";
   foreach ( $result as $row ) {
      echo "<tr><td>" . $row['field1'] . "</td>" . 
           "<td>" . $row['field2'] . "</td>" .
           "<td>" . $row['field3'] . "</td>" .
           "</tr>\r\n";
   }
   echo '</table>' . "\r\n";
 } 
catch(PDOException $pe) {
   echo $pe->getMessage();
   exit(0);
 }
?>

How to get SQLite3 working in PHP 5.4, 5.5 and up - on Windows

1) Check to see if PHP believes you have SQLite3 installed and working

Create this PHP script (I created it as sqlSandbox.php in the top-level of my web-server's web root directory)

<?php
// Give yourself all the debugging info you can
error_reporting(E_ALL | E_STRICT);

ini_set('display_errors', TRUE);

// What version of PHP is running?
echo "phpversion " . phpversion();

echo "<br>";

// Everything and the Kitchen sink
phpinfo();
?>

Things to check on this page:
A) Top section
Loaded Configuration FileM:\php-5.5.10\php.ini
This shows you which php.ini file is the one to alter.
B) In the PDO section
You should see
PDO supportenabled
PDO driverssqlite

C) There should be a pdo_sqlite section.
PDO Driver for SQLite 3.xenabled
SQLite Library3.7.7.1

D) There should be a sqlite3 section
SQLite3 supportenabled
SQLite3 module version0.7-dev
SQLite Library3.7.7.1

DirectiveLocal ValueMaster Value
sqlite3.extension_dirM:\sqlite3M:\sqlite3


2) Note that any function in the PHP manual beginning "sqlite_"  refers to sqlite2 and below, and that only references beginning with SQLite3 work with SQLite3.

3) Make sure you have a php.ini file in your php directory
(I created mine by copying php-production.ini to php.ini)

4) Make sure PHP can see the PHP Windows extensions
In php.ini
Uncomment the last line of this section, (by removing the ; at the start of the line) and add the ext sub-directory

; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
; extension_dir =

So the final line becomes:

extension_dir = ext

5) Enable the PDO Windows extension for SQLite
In php.ini
Uncomment this line (by removing the ; at the start of the line)
to get
extension=php_pdo_sqlite.dll

6) Enable the SQLite3 Windows extension
In php.ini
Uncomment this line (by removing the ; at the start of the line)
to get
extension=php_sqlite3.dll

7) Tell PHP where SQLite is.
Uncomment this line (by removing the ; at the start of the line) and put in the relevant directory
[sqlite3]
sqlite3.extension_dir = M:\sqlite3