<?php
$dbfilename = 'demo.db';
if (is_file($dbfilename)) {
unlink($dbfilename);
}
$sql = 'CREATE TABLE demo (id int, name string)';
$result = demoQuery($dbfilename, $sql);
var_dump($result);
$sql = 'SELECT * FROM demo WHERE id=0';
$rows = demoQuery($dbfilename, $sql);
var_dump($rows);
$sql = 'INSERT INTO demo VALUES (0, "A")';
$result = demoQuery($dbfilename, $sql);
var_dump($result);
$sql = 'SELECT * FROM demo WHERE id=0';
$rows = demoQuery($dbfilename, $sql);
var_dump($rows);
function demoQuery(string $dbfilename, string $sql) : array {
$fetchable = (0===stripos(trim($sql), 'select'));
$db = new SQLite3($dbfilename);
if ($db === false) {
throw new Exception("demoQuery: open error " . $dbfilename);
}
//$result = $db->query($sql);
$stmt = $db->prepare($sql);
if ($stmt === false) {
throw new Exception("demoQuery: prepare error " . $sql);
}
// TODO //$stmt->bindvalue();
$result = $stmt->execute();
if ($result === false) {
throw new Exception("demoQuery: execute query error " . $sql);
}
$rows = [];
if (true) { // Expected to work before reading internals of PHP+SQLite3
//if ($fetchable) { // May work
//if ($result->columnName(0) !== false) { // Works
//if ($result->columnType(0)!=SQLITE3_NULL) { // Didnt work
//if ($result->fetchArray()) { // Dangerous
//if ($result->finalize()) { // Cant do that
//if ($result->numColumns()!==0) { // Works
//if ($result->reset()) { // Didnt work
//if ($result->columnName(0) !== false || $result->numColumns()!==0) { // My best
while ($row = $result->fetchArray()) {
$rows[] = $row;
}
}
$db->close();
return $rows;
}