Advertencia: algunas funciones de esta página requieren un navegador o Sistema Operativo más actualizado que el que está utilizando. Si tiene un navegador diferente disponible, abra esta página con él.
Conéctese a una base de datos y ejecute sentencias SQL
Documentación API- Esta página utiliza una base de datos con SQL para guardar y mostrar vistas de página recientes y solicitudes HTTP.
 - Use los controles para enviar solicitudes adicionales, o pruebe esta página con otros navegadores o herramientas de desarrollo para ver diferentes agentes de usuario.
 - El código de ejemplo de la base de datos y el código PHP para esta página están debajo de la tabla.
 - Puede resaltar una fila en la tabla haciendo clic en ella.
 
- Rojo
 - Verde
 - Azul
 - Amarillo
 
| ID | URL | Método | Tipo de Dispositivo | Tipo de Sistema Operativo | OS | Navegador | Agente de usuario | Fecha solicitada | 
|---|---|---|---|---|---|---|---|---|
| 1658 | /es/examples/database-demo | GET | Bot | Bot | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) | 2025-11-04 08:38:20 | ||
| 1657 | /en/examples/database-demo | GET | Bot | Bot | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot | 2025-11-04 06:52:07 | ||
| 1656 | /fr/examples/database-demo | GET | Bot | Bot | Mozilla/5.0 (compatible; SeznamBot/4.0; +https://o-seznam.cz/napoveda/vyhledavani/en/seznambot-crawler/) | 2025-11-04 06:51:52 | ||
| 1655 | /es/examples/database-demo | GET | Bot | Android | Android 6.0.1 | Chrome | Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.122 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) | 2025-11-04 06:07:41 | 
| 1654 | /zh-CN/examples/database-demo | GET | Bot | Bot | Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/) | 2025-11-04 04:21:27 | ||
| 1653 | /fr/examples/database-demo | GET | Bot | Bot | Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/) | 2025-11-04 03:57:27 | ||
| 1652 | /pt-BR/examples/database-demo | GET | Bot | Bot | Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/) | 2025-11-04 03:53:56 | ||
| 1651 | /pt-BR/examples/database-demo | GET | Bot | Bot | Mozilla/5.0 (compatible; BLEXBot/1.0; +https://help.seranking.com/en/blex-crawler) | 2025-11-04 03:38:43 | ||
| 1650 | /es/examples/database-demo | GET | Bot | Bot | Mozilla/5.0 (compatible; BLEXBot/1.0; +https://help.seranking.com/en/blex-crawler) | 2025-11-04 03:32:52 | ||
| 1649 | /en/examples/database-demo | GET | Bot | Bot | Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/) | 2025-11-04 02:00:28 | ||
| 1648 | /ar/examples/database-demo | GET | Bot | Bot | Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/) | 2025-11-03 23:59:08 | ||
| 1647 | /pt-BR/examples/database-demo | GET | Desktop | Linux | Linux | Chrome | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 | 2025-11-03 22:57:11 | 
| 1646 | /pt-BR/examples/database-demo | HEAD | Desktop | Linux | Linux | Chrome | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 | 2025-11-03 22:57:11 | 
| 1645 | /en/examples/database-demo | GET | Bot | Bot | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot | 2025-11-03 22:16:47 | ||
| 1644 | /es/examples/database-demo | GET | Mobile | Android | Android 7.0 | Webkit | Mozilla/5.0 (Linux; Android 7.0;) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; PetalBot;+https://webmaster.petalsearch.com/site/petalbot) | 2025-11-03 19:04:35 | 
| 1643 | /pt-BR/examples/database-demo | GET | Desktop | Linux | Linux | Firefox | Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:144.0) Gecko/20100101 Firefox/144.0 | 2025-11-03 18:26:29 | 
| 1642 | /pt-BR/examples/database-demo | GET | Desktop | Linux | Linux | Firefox | Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:144.0) Gecko/20100101 Firefox/144.0 | 2025-11-03 18:26:28 | 
| 1641 | /ar/examples/database-demo | GET | Bot | Bot | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) | 2025-11-03 15:48:13 | ||
| 1640 | /pt-BR/examples/database-demo | GET | Bot | Bot | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) | 2025-11-03 14:48:16 | ||
| 1639 | /es/examples/database-demo | GET | Bot | Bot | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot) | 2025-11-03 13:01:28 | 
Descripción general del código de base de datos
// Conectarse a una base de datos
$db = new \FastSitePHP\Data\Database($dsn, $user, $password);
// Consulta para registros múltiples
// Devuelve una matriz de registros (matriz asociativa para cada registro).
$sql = 'SELECT * FROM pages';
$records = $db->query($sql);
// Consulta para un registro. Devuelve una matriz asociativa o [nulo] si
// no se encuentra. Tanto [query()] como [queryOne()] admiten parámetros
// opcionales al realizar consultas.
$sql = 'SELECT * FROM pages WHERE id = ?';
$params = [1];
$record = $db->queryOne($sql, $params);
// Utilice [execute()] para INSERT, UPDATE, DELETE, CREATE y otras transacciones.
// Además de usar [?] También puede usar parámetros con nombre en el formato
// de ':nombre'. Los parámetros con nombre pueden hacer que el código sea más
// fácil de leer.
$sql = 'INSERT INTO pages (title, content)';
$sql .= ' VALUES (:title, :content)';
$params = [
    'title'   => 'Database Demo',
    'content' => '<h1>Database Demo<h1>',
];
$rows_affected = $db->execute($sql, $params);
// Se pueden encontrar muchos ejemplos adicionales en la página de
// referencia 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;
    }
}