Sqlite

SQLite je RDBMS (relational database management system) baza podataka
napisana u C programskom jeziku. Sqlite se koristi gotovo svugdje od
iOS-a do Firefox preglednika.

Glavna uočljiva razlika je u tome što se baza nalazi u .db datoteci.
Obično se baza (npr. MariaDB) nalazi na poslužitelju, gdje je pokrenuta kao
servis, sa otvorenim port-om 3306.

PDO

PDO (PHP Data Objects) php sučelje za pristup podacima u bazama podataka
sa podrškom za više različitih baza, pa tako i našeg Sqlite-a.

Navedeno sučelje također pruža i zaštitu od SQL-Injection napada preko
takozvanoga prepared statements načina unosa SQL naziva.
SQL-Injection je kada vam netko pokušava ‘prošvercati’ maliciozni SQL
uz vaš. Bez validacije ili prepared statements, maliciozni SQL se izvršava
odmah nakon vašega.

Prije svega potrebno je provjeriti ‘/etc/php/php.ini’ datoteku i
od-komentirati:

extension=sqlite3
extension=pdo_sqlite

U PHP-u možemo provjeriti da li je ekstenzija aktivna:

if (!extension_loaded('sqlite3')) {
    error_log('Nema sqlite3!');
}

Ako nije instaliramo:

sudo pacman -S php-sqlite
#na ubuntu/debian:
#sudo apt-get install php-sqlite

PDO iniciramo tako da kao argument unesemo putanju datoteke koja će
biti korištena kao baza podataka:

$pdo = new \PDO("sqlite:".__DIR__."/database.db");

Prije unosa, argumente je potrebno validitirati. Ako ne koristite framework, možete preko composer-a ubaciti respect/validation.
Na primjer, da unesemo korisnika, koristimo:

function insertUser($username, $email, $password)
{    
    // Pozovi PDO objekt.
    $pdo = initDatabase();
    
    // SQL sa `prepared statement` varijablama.
    $sql = "INSERT INTO users(username, email, password, createdAt) VALUES ( :username , :email , :password , datetime('now') )";
    $stmt = $pdo->prepare($sql);  

    // Povezivanje varijabli.
    $data = [
        'username' => $username, 
        'email' =>    $email, 
        'password' => $password,
    ];

    try 
    {  
        // Pokušaj pokrenuti query, ako nema problema, vrati pkid. 
        $stmt->execute($data);                 
        $lastId = intval($pdo->lastInsertId());
        return $lastId;
    }
    catch (\PDOException $e)
    {           
        // Javi grešku.
        echo ('ERROR => ' . $e);
    } 
    
    // Vrati -1, jer pkid je pozitivni integer.
    return -1; 
}

Ostale funkcije (kao i cijeli projekt) možete pronaći na mom github-u:

https://github.com/damir-sijakovic/sqlite3_php_pdo_examples/blob/main/functions.php