Conectar a um banco de dados e executar instruções SQL

Documentação da API
  • Vermelho
  • Verde
  • Azul
  • Amarelo
Id URL Método Tipo de Dispositivo Tipo de SO SO Navegador User-Agent Data Requisitado
172 /pt-BR/examples/database-demo GET Bot Bot Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) 2024-05-19 13:27:16
171 /zh-CN/examples/database-demo GET Bot Bot Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) 2024-05-19 12:43:00
170 /fr/examples/database-demo GET Desktop Windows Windows 10 Edge (Chromium) Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0 2024-05-19 08:07:45
169 /en/examples/database-demo GET Bot Bot Bing Bot Chrome Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/116.0.1938.76 Safari/537.36 2024-05-18 22:13:27
168 /es/examples/database-demo GET Desktop Windows Windows 10 Opera Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 OPR/89.0.4447.51 2024-05-18 19:47:35
167 /es/examples/database-demo GET Bot Bot Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/) 2024-05-18 16:08:07
166 /en/examples/database-demo GET Desktop Mac Mac OS X Safari Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15 (Applebot/0.1; +http://www.apple.com/go/applebot) 2024-05-18 13:28:42
165 /pt-BR/examples/database-demo GET Desktop Mac Mac OS X Chrome Mozilla/5.0 (Macintosh; Intel Mac OS X 12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 YaBrowser/22.7.0 Yowser/2.5 Safari/537.36 2024-05-18 10:01:45
164 /es/examples/database-demo GET Desktop Mac Mac OS X Chrome Mozilla/5.0 (Macintosh; Intel Mac OS X 12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 YaBrowser/22.7.0 Yowser/2.5 Safari/537.36 2024-05-18 10:01:40
163 /fr/examples/database-demo GET Desktop Mac Mac OS X Chrome Mozilla/5.0 (Macintosh; Intel Mac OS X 12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Vivaldi/5.3.2679.68 2024-05-18 07:54:36
162 /es/examples/database-demo GET Mobile Android Android 10 Chrome Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36 2024-05-18 06:49:58
161 /es/examples/database-demo GET Mobile Android Android 10 Chrome Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36 2024-05-18 03:00:32
160 /es/examples/database-demo GET Mobile Android Android 10 Chrome Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Mobile Safari/537.36 2024-05-17 19:18:17
159 /es/examples/database-demo GET Desktop Windows Windows 10 Firefox Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:114.0) Gecko/20100101 Firefox/114.0 2024-05-17 12:57:37
158 /ar/examples/database-demo GET Bot Bot Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) 2024-05-17 05:29:33
157 /fr/examples/database-demo GET Desktop Linux Linux Chrome Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.1077 YaBrowser/23.9.1.1077 Yowser/2.5 Safari/537.36 2024-05-17 03:06:41
156 /zh-CN/examples/database-demo GET Bot Bot Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/) 2024-05-16 22:02:41
155 /es/examples/database-demo GET Bot Bot Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/) 2024-05-16 21:24:01
154 /en/examples/database-demo GET Bot Bot Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/) 2024-05-16 20:47:36
153 /es/examples/database-demo GET Desktop Windows Windows 10 Chrome Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 2024-05-16 20:26:03

Visão geral do código do banco de dados

// Conecte a um Banco de Dados
$db = new \FastSitePHP\Data\Database($dsn, $user, $password);

// Consulta para Múltiplos Registros
// Retorna um Array de Registros (Array Associativo para cada Registro).
$sql = 'SELECT * FROM pages';
$records = $db->query($sql);

// Consulta para um registro. Retorna um Array Associativo ou [null] se não
// encontrado. Ambas [query()] e [queryOne()] suportam parâmetros opcionais ao
// consultar.
$sql = 'SELECT * FROM pages WHERE id = ?';
$params = [1];
$record = $db->queryOne($sql, $params);

// Utiliza [execute()] para INSERT, UPDATE, DELETE, CREATE e outras Transações.
// Além de utilizar [?] você pode também utilizar parâmetros nomeados no formato
// ":name". Parâmetros nomeados capo tornar o código mais fácil de ler.
$sql = 'INSERT INTO pages (title, content)';
$sql .= ' VALUES (:title, :content)';
$params = [
    'title'   => 'Banco de Dados de Demonstração',
    'content' => '<h1>Banco de Dados de Demonstração<h1>',
];
$rows_affected = $db->execute($sql, $params);

// Muitos exemplos adicionais pode ser encontrados na página Referência Rápida.

Código PHP para esta página

<?php

namespace App\Controllers\Examples;

use FastSitePHP\Application;
use FastSitePHP\Data\Database;
use FastSitePHP\Lang\I18N;
use FastSitePHP\Web\Request;

class DatabaseDemo
{
    /**
     * Return HTML for the Web Page
     */
    public function get(Application $app, $lang)
    {
        // Load Language File
        I18N::langFile('database-demo', $lang);

        // Add Code Example from text file
        $file_path = $app->config['I18N_DIR'] . '/code/database-demo.{lang}.txt';
        $app->locals['i18n']['db_code'] = I18N::textFile($file_path, $app->lang);

        // Add a record for the request and get the 20 most recent records
        $records = $this->insertAndSelectRecords($app);

        // Render the View
        $templates = [
            'old-browser-warning.htm',
            'examples/database-demo.php',
            'examples/database-demo.htm',
            'table-highlighter.htm',
        ];
        return $app->render($templates, [
            'nav_active_link' => 'examples',
            'records' => $records,
            'controller_code' => file_get_contents(__FILE__),
        ]);
    }

    /**
     * JSON Service that logs requests from button clicks.
     * Returns the 20 most recent records.
     */
    public function routePage(Application $app, $lang, $color)
    {
        return ['records' => $this->insertAndSelectRecords($app)];
    }

    /**
     * Add a record for the request and return recent records
     */
    private function insertAndSelectRecords(Application $app)
    {
        $db = $this->connectToDb();
        $this->insertRecord($app, $db);
        $records = $this->getRecentRecords($db);
        return $records;
    }

    /**
     * Return a Db Connection to a SQLite Database in the Temp
     * Directory. Create the file if it doesn't yet exist.
     */
    private function connectToDb()
    {
        // Path to SQLite Db
        $path = sys_get_temp_dir() . '/database-demo.sqlite';
        $this->checkDb($path);

        // Connect and create table the first time the db is used
        $dsn = 'sqlite:' . $path;
        $db = new Database($dsn);
        $sql = <<<'SQL'
            CREATE TABLE IF NOT EXISTS requests (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    url TEXT,
                    method TEXT,
                    user_agent TEXT,
                    date_requested TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            )
SQL;
        $db->execute($sql);
        return $db;
    }

    /**
     * Delete the SQLite Database every time it reaches over 10 megabytes.
     * It is intended only as a temporary database for this demo page.
     */
    private function checkDb($path) {
        if (is_file($path)) {
            $ten_megabytes = (1024 * 1024 * 10);
            $file_size = filesize($path);
            if ($file_size > $ten_megabytes) {
                unlink($path);
                // Add to a log file each time it's removed
                $log_path = sys_get_temp_dir() . '/database-demo.txt';
                $now = date(DATE_RFC2822);
                $contents = "${path} deleted at ${now}\n";
                file_put_contents($log_path, $contents, FILE_APPEND);
            }
        }
    }

    /**
     * Insert a Record for each Request
     */
    private function insertRecord(Application $app, Database $db)
    {
        $req = new Request();
        $sql = 'INSERT INTO requests (url, method, user_agent) VALUES (?, ?, ?)';
        $params = [$app->requestedPath(), $req->method(), $req->userAgent()];
        $db->execute($sql, $params);
    }

    /**
     * Return the 20 most recent records.
     * The SELECT statement is defined in a [*.sql] file,
     * which allows for easy editing and testing outside of PHP code.
     */
    private function getRecentRecords(Database $db)
    {
        $sql = file_get_contents(__DIR__ . '/../../Models/DatabaseDemo.sql');
        $records = $db->query($sql);
        return $records;
    }
}