How can I use and access an SQLite DB using PHP and Wamp Server?

19,127

Solution 1

I think the class SQLiteDatabase is from the extension sqlite rather pdo_sqlite. So you could enable the sqlite extension, or use PDO instead:

<?php
$conn = new PDO('sqlite:c:/mydb.sq3');
$conn->exec('some sql query');

Solution 2

On Windows you need to have the following set in your ini:

extension=php_pdo.dll
extension=php_sqlite.dll

I recommend you read this page in the manual.

Solution 3

Class SQLiteDatabase is an object from sqlite library, which support was dropped in PHP 5.4, but on various systems and configuration could be disabled in an earlier releases, as this library was long time marked as going to be deprecated.

Library php_sqlite.dll (Windows) or php_sqlite.so (Linux) is no longer supported in newer versions of PHP and was replaced with php_sqlite3.dll or php_sqlite3.so respectively.

You can:

  1. Try to find php_sqlite.dll (php_sqlite.so) somewhere in the Internet. Links like this or this may be helpful for you. However, you'll have to carefully match old SQLite library file to your PHP's platform (x64 or x86), build engine (VC6, VC9 or VC11), version (5.x) and type (TS for thread safe or NTS for non-thread safe). This might be a hard task.

  2. Leave php_sqlite.dll (SQLiteDatabase) behind and ship toward new php_sqlite3.dll (SQLite3 object). You have to first use a tool like SQLite Studio to convert your database file from 2.1 to 3.0 (size can be lowered by even a half) and then carefully compare SQLite and SQLite3 PHP manual pages to change necessary objects and functions call.

If option two, note that this shouldn't be a hard work, as changes aren't that big. For example, what I've learned so far:

  • SQLiteDatabase -> SQLite3,
  • SQLiteDatabase::unbufferedQuery -> SQLite3::query,
  • SQLiteResult::fetchAll(SQLITE_*) -> SQLite3Result::fetchArray(SQLITE3_*) etc.

As for fetching, in old SQLite we had:

$rowsIMEI = $db->unbufferedQuery($imeiSQL)->fetchAll(SQLITE_ASSOC);

foreach($rowsIMEI as $r)
{
    ...
}

While, in new SQLite3 we should:

$rowsIMEI = $db->query($imeiSQL);

while($r = $rowsIMEI->fetchArray(SQLITE3_ASSOC))
{
    ...
}

Other changes requires similar amount of work, so this shouldn't be a life-time process.

I, of course, strongly advice anyone to go forward and choose second option. Progress is in most cases the better one of two available options.

Share:
19,127
Jarvis
Author by

Jarvis

Updated on June 07, 2022

Comments

  • Jarvis
    Jarvis almost 2 years

    I know PHP 5 already supports SQLite but for some reason I can't get it to work.

    I followed the instructions from SQLite tutorial: Getting started. I also made sure that the following are not commented out from php.ini:

    extension=php_pdo_sqlite.dll 
    extension=php_sqlite.dll.
    

    But when I open the PHP file from localhost using Firefox, I get this error:

    Fatal error: Class 'SQLiteDatabase' not found.

    I'm on Windows by the way, if that info matters.

    What may be the cause of this problem?

  • Jarvis
    Jarvis almost 15 years
    Thanks a lot! I think I was able to get past opening the db because now the errors pertain to the query! Now I just have to learn the syntax and all! Thanks again!