G. api / Bd.php

1
<?php
2
3
class Bd
4
{
5
 private static ?PDO $pdo = null;
6
7
 static function conexion(): PDO
8
 {
9
  if (self::$pdo === null) {
10
11
   self::$pdo = new PDO(
12
    // cadena de conexión
13
    "sqlite:" . __DIR__ . "/srvauno.db",
14
    // usuario
15
    null,
16
    // contraseña
17
    null,
18
    // Opciones: pdos no persistentes y lanza excepciones.
19
    [PDO::ATTR_PERSISTENT => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
20
   );
21
22
   self::$pdo->exec(
23
    "CREATE TABLE IF NOT EXISTS PASATIEMPO (
24
      PAS_ID INTEGER,
25
      PAS_NOMBRE TEXT NOT NULL,
26
      CONSTRAINT PK_PAS PRIMARY KEY(PAS_ID),
27
      CONSTRAINT UQ_PAS_NOM UNIQUE(PAS_NOMBRE),
28
      CONSTRAINT CHK_PAS_NOM CHECK(LENGTH(PAS_NOMBRE) > 0)
29
     )"
30
   );
31
   self::$pdo->exec(
32
    'CREATE TABLE IF NOT EXISTS AMIGO (
33
      AMI_ID INTEGER,
34
      AMI_NOMBRE TEXT NOT NULL,
35
      AMI_PAS_ID INTEGER,
36
      CONSTRAINT PK_AMI PRIMARY KEY(AMI_ID),
37
      CONSTRAINT UQ_AMI_NOM UNIQUE(AMI_NOMBRE),
38
      CONSTRAINT CHK_AMI_NOM CHECK(LENGTH(AMI_NOMBRE) > 0),
39
      CONSTRAINT FK_AMI_PAS
40
       FOREIGN KEY (AMI_PAS_ID) REFERENCES PASATIEMPO(PAS_ID)
41
     )'
42
   );
43
44
   $cantidadDePasatiempos =
45
    self::$pdo->query("SELECT COUNT(PAS_ID) FROM PASATIEMPO")->fetchColumn(0);
46
47
   if ($cantidadDePasatiempos === 0) {
48
    self::$pdo->exec(
49
     "INSERT INTO PASATIEMPO (PAS_NOMBRE) VALUES ('Futbol'), ('Videojuegos')"
50
    );
51
   }
52
  }
53
54
  return self::$pdo;
55
 }
56
}
57
skip_previous skip_next