"string", "table" => "string", "cols" => "array", "suffix" => "?string", ]; static function is_create(string $sql): bool { } static function parse_create(array $query, ?array &$params=null): string { } const select_SCHEMA = [ "prefix" => "string", "cols" => "?array", "from" => "?string", "where" => "?array", "order by" => "?array", "group by" => "?array", "having" => "?array", ]; static function is_select(string $sql): bool { } static function parse_select(array $query, ?array &$params=null): string { } const insert_SCHEMA = [ "prefix" => "string", "into" => "?string", "cols" => "?array", "values" => "?array", ]; static function is_insert(string $sql): bool { } static function parse_insert(array $query, ?array &$params=null): string { } const update_SCHEMA = [ "prefix" => "string", "table" => "?string", "cols" => "?array", "values" => "?array", "where" => "?array", ]; static function is_update(string $sql): bool { } static function parse_update(array $query, ?array &$params=null): string { } const delete_SCHEMA = [ "prefix" => "string", "from" => "?string", "where" => "?array", ]; static function is_delete(string $sql): bool { } static function parse_delete(array $query, ?array &$params=null): string { } function __construct($sql, ?array $params=null) { self::verifix($sql, $params); $this->sql = $sql; $this->params = $params; } /** @var string */ protected $sql; /** @var ?array */ protected $params; function useStmt(SQLite3 $db, ?SQLite3Stmt &$stmt=null, ?string &$sql=null): bool { if ($this->params !== null) { /** @var SQLite3Stmt $stmt */ $stmt = SqliteException::check($db, $db->prepare($this->sql)); $close = true; try { foreach ($this->params as $param => $value) { SqliteException::check($db, $stmt->bindValue($param, $value)); } $close = false; return true; } finally { if ($close) $stmt->close(); } } else { $sql = $this->sql; return false; } } }