|
6 | 6 |
|
7 | 7 | use Illuminate\Database\Connection;
|
8 | 8 | use Illuminate\Support\Str;
|
9 |
| -use PDO; |
10 |
| -use PDOStatement; |
11 | 9 |
|
12 | 10 | /**
|
13 | 11 | * @internal
|
@@ -42,44 +40,15 @@ public function driverName(Connection $db): string
|
42 | 40 |
|
43 | 41 | /**
|
44 | 42 | * @param mixed[] $bindings
|
45 |
| - * @return int|float|string|null |
46 | 43 | */
|
47 |
| - public function queryScalar(Connection $db, string $sql, array $bindings = []): mixed |
| 44 | + public function queryScalar(Connection $db, string $sql, array $bindings = []): string |
48 | 45 | {
|
49 |
| - return $this->executeQuery($db, $sql, $bindings, function (PDOStatement $statement): mixed { |
50 |
| - /** @var int|float|string|null $value */ |
51 |
| - $value = $statement->fetchColumn(); |
52 |
| - |
53 |
| - return $value; |
54 |
| - }); |
55 |
| - } |
56 |
| - |
57 |
| - /** |
58 |
| - * @template T |
59 |
| - * |
60 |
| - * @param mixed[] $bindings |
61 |
| - * @param (callable(\PDOStatement): T) $fn |
62 |
| - * @return T |
63 |
| - */ |
64 |
| - private function executeQuery(Connection $db, string $sql, array $bindings, callable $fn): mixed |
65 |
| - { |
66 |
| - invade($db)->reconnectIfMissingConnection(); |
67 |
| - $pdo = $db->getPdo(); |
68 |
| - |
69 |
| - $emulatePrepares = $pdo->getAttribute(PDO::ATTR_EMULATE_PREPARES); |
70 |
| - $errorMode = $pdo->getAttribute(PDO::ATTR_ERRMODE); |
71 |
| - try { |
72 |
| - $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); |
73 |
| - $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); |
| 46 | + if (method_exists($db, 'scalar')) { |
| 47 | + return (string) $db->scalar($sql, $bindings); |
| 48 | + } |
74 | 49 |
|
75 |
| - $statement = $pdo->prepare($sql); |
76 |
| - $db->bindValues($statement, $db->prepareBindings($bindings)); |
77 |
| - $statement->execute(); |
| 50 | + $record = (array) $db->selectOne($sql, $bindings); |
78 | 51 |
|
79 |
| - return $fn($statement); |
80 |
| - } finally { |
81 |
| - $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, $emulatePrepares); |
82 |
| - $pdo->setAttribute(PDO::ATTR_ERRMODE, $errorMode); |
83 |
| - } |
| 52 | + return (string) reset($record); |
84 | 53 | }
|
85 | 54 | }
|
0 commit comments