Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

58 lines
1.2KB

  1. <?php
  2. declare(strict_types=1);
  3. namespace Core;
  4. use PDO;
  5. class Database
  6. {
  7. protected PDO $pdo;
  8. public function __construct(array $config)
  9. {
  10. $this->pdo = new PDO(
  11. $config['dsn'],
  12. $config['username'] ?? null,
  13. $config['password'] ?? null,
  14. $config['options'] ?? []
  15. );
  16. }
  17. public function pdo(): PDO
  18. {
  19. return $this->pdo;
  20. }
  21. public function query(string $sql, array $parameters = []): array
  22. {
  23. $statement = $this->pdo->prepare($sql);
  24. $statement->execute($parameters);
  25. return array_map([$this, 'resolveStreams'], $statement->fetchAll(PDO::FETCH_ASSOC));
  26. }
  27. private function resolveStreams(array $row): array
  28. {
  29. return array_map(
  30. static fn($v) => is_resource($v) ? (stream_get_contents($v) ?: '') : $v,
  31. $row
  32. );
  33. }
  34. public function first(string $sql, array $parameters = []): ?array
  35. {
  36. $rows = $this->query($sql, $parameters);
  37. return $rows[0] ?? null;
  38. }
  39. public function execute(string $sql, array $parameters = []): bool
  40. {
  41. $statement = $this->pdo->prepare($sql);
  42. return $statement->execute($parameters);
  43. }
  44. }

Powered by TurnKey Linux.