Back to Opencart

File system\library\db\pdo.php

docs/api/source-system.library.db.pdo.html

4.1.0.36.9 KB
Original Source

Namespaces

Classes

| 1: | <?php | | 2: | namespace Opencart\System\Library\DB; | | 3: | /** | | 4: | * Class PDO | | 5: | * | | 6: | * @package Opencart\System\Library\DB | | 7: | */ | | 8: | class PDO { | | 9: | /** | | 10: | * @var \PDO|null | | 11: | */ | | 12: | private ?\PDO $connection; | | 13: | /** | | 14: | * @var array<string, string> | | 15: | */ | | 16: | private array $data = []; | | 17: | /** | | 18: | * @var int | | 19: | */ | | 20: | private int $affected; | | 21: | | | 22: | /** | | 23: | * Constructor | | 24: | * | | 25: | * @param string $hostname | | 26: | * @param string $username | | 27: | * @param string $password | | 28: | * @param string $database | | 29: | * @param string $port | | 30: | */ | | 31: | public function __construct(string $hostname, string $username, string $password, string $database, string $port = '') { | | 32: | if (!$port) { | | 33: | $port = '3306'; | | 34: | } | | 35: | | | 36: | try { | | 37: | $pdo = new \PDO('mysql:host=' . $hostname . ';port=' . $port . ';dbname=' . $database . ';charset=utf8mb4', $username, $password, [\PDO::ATTR_PERSISTENT => false, \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4 COLLATE utf8mb4_general_ci']); | | 38: | } catch (\PDOException $e) { | | 39: | throw new \Exception('Error: Could not make a database link using ' . $username . '@' . $hostname . '!'); | | 40: | } | | 41: | | | 42: | $this->connection = $pdo; | | 43: | | | 44: | $this->query("SET SESSION sql_mode = 'NO_ZERO_IN_DATE,NO_ENGINE_SUBSTITUTION'"); | | 45: | $this->query("SET FOREIGN_KEY_CHECKS = 0"); | | 46: | | | 47: | // Sync PHP and DB time zones | | 48: | $this->query("SET time_zone = '" . $this->escape(date('P')) . "'"); | | 49: | } | | 50: | | | 51: | /** | | 52: | * Query | | 53: | * | | 54: | * @param string $sql | | 55: | * | | 56: | * @return \stdClass|true | | 57: | */ | | 58: | public function query(string $sql) { | | 59: | $sql = preg_replace('/(?:':)([a-z0-9]*.)(?:')/', ':$1', $sql); | | 60: | | | 61: | $statement = $this->connection->prepare($sql); | | 62: | | | 63: | try { | | 64: | if ($statement && $statement->execute($this->data)) { | | 65: | $this->data = []; | | 66: | | | 67: | if ($statement->columnCount()) { | | 68: | $data = $statement->fetchAll(\PDO::FETCH_ASSOC); | | 69: | $statement->closeCursor(); | | 70: | | | 71: | $result = new \stdClass(); | | 72: | $result->row = $data[0] ?? []; | | 73: | $result->rows = $data; | | 74: | $result->num_rows = count($data); | | 75: | $this->affected = 0; | | 76: | | | 77: | return $result; | | 78: | } else { | | 79: | $this->affected = $statement->rowCount(); | | 80: | $statement->closeCursor(); | | 81: | | | 82: | return true; | | 83: | } | | 84: | } else { | | 85: | return true; | | 86: | } | | 87: | } catch (\PDOException $e) { | | 88: | throw new \Exception('Error: ' . $e->getMessage() . ' <br/>Error Code : ' . $e->getCode() . ' <br/>' . $sql); | | 89: | } | | 90: | } | | 91: | | | 92: | /** | | 93: | * Escape | | 94: | * | | 95: | * @param string $value | | 96: | * | | 97: | * @return string | | 98: | */ | | 99: | public function escape(string $value): string { | | 100: | $key = ':' . count($this->data); | | 101: | | | 102: | $this->data[$key] = $value; | | 103: | | | 104: | return $key; | | 105: | } | | 106: | | | 107: | /** | | 108: | * countAffected | | 109: | * | | 110: | * @return int | | 111: | */ | | 112: | public function countAffected(): int { | | 113: | return $this->affected; | | 114: | } | | 115: | | | 116: | /** | | 117: | * getLastId | | 118: | * | | 119: | * @return ?int | | 120: | */ | | 121: | public function getLastId(): ?int { | | 122: | $id = $this->connection->lastInsertId(); | | 123: | | | 124: | return $id ? (int)$id : null; | | 125: | } | | 126: | | | 127: | /** | | 128: | * isConnected | | 129: | * | | 130: | * @return bool | | 131: | */ | | 132: | public function isConnected(): bool { | | 133: | return $this->connection !== null; | | 134: | } | | 135: | | | 136: | /** | | 137: | * Destructor | | 138: | * | | 139: | * Closes the DB connection when this object is destroyed. | | 140: | */ | | 141: | public function __destruct() { | | 142: | $this->connection = null; | | 143: | } | | 144: | } | | 145: | |

OpenCart API API documentation generated by ApiGen dev-master