Skip to content

Commit b675835

Browse files
committed
Merge pull request #147 from diepxuan/refactor/remove-dead-code-procedurecaller
fix: UTF-8 parameter binding in ProcedureCaller + remove dead code
1 parent 40bbb64 commit b675835

1 file changed

Lines changed: 12 additions & 33 deletions

File tree

src/StoredProcedures/ProcedureCaller.php

Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* @author Tran Ngoc Duc <ductn@diepxuan.com>
99
* @author Tran Ngoc Duc <caothu91@gmail.com>
1010
*
11-
* @lastupdate 2026-04-07 12:39:39
11+
* @lastupdate 2026-04-07 13:04:50
1212
*/
1313

1414
namespace Diepxuan\Simba\StoredProcedures;
@@ -87,7 +87,7 @@ public static function call(string $name, array $params = [], ?string $connectio
8787
if (empty($bindings)) {
8888
$rows = $conn->select($sql);
8989
} else {
90-
// Replace ? với Unicode literal
90+
// Replace :placeholder với Unicode literal (fix UTF-8 cho SQL Server)
9191
$processedQuery = self::replacePlaceholders($sql, $bindings);
9292
$rows = $conn->select($processedQuery);
9393
}
@@ -146,41 +146,20 @@ public static function toUnicodeLiteral(mixed $value): string
146146
}
147147

148148
/**
149-
* Replace ? placeholders với Unicode literals.
149+
* Replace :placeholder với Unicode literals (N'...')
150+
* Fix UTF-8 cho SQL Server parameter binding trên Linux.
151+
*
152+
* @param string $query SQL query với :named placeholders
153+
* @param array $bindings Associative array [paramName => value]
150154
*/
151155
private static function replacePlaceholders(string $query, array $bindings): string
152156
{
153-
$count = 0;
154-
155-
return preg_replace_callback('/\?/', static function () use ($bindings, &$count) {
156-
$value = $bindings[$count] ?? null;
157-
++$count;
158-
159-
return self::toUnicodeLiteral($value);
160-
}, $query);
161-
}
162-
163-
/**
164-
* Kiểm tra xem value có phải là date/datetime format không.
165-
*/
166-
private static function isDateOrDatetime(string $value): bool
167-
{
168-
// Check các format date/datetime phổ biến
169-
// YYYY-MM-DD, YYYY-MM-DD HH:MM:SS, DD/MM/YYYY, v.v.
170-
$datePatterns = [
171-
'/^\d{4}-\d{2}-\d{2}$/', // 2026-04-06
172-
'/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', // 2026-04-06 12:30:45
173-
'/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/', // 2026-04-06T12:30:45 (ISO 8601)
174-
'/^\d{2}\/\d{2}\/\d{4}$/', // 06/04/2026
175-
'/^\d{2}-\d{2}-\d{4}$/', // 06-04-2026
176-
];
177-
178-
foreach ($datePatterns as $pattern) {
179-
if (preg_match($pattern, $value)) {
180-
return true;
181-
}
157+
foreach ($bindings as $key => $value) {
158+
$literal = self::toUnicodeLiteral($value);
159+
$pattern = '/:' . preg_quote($key, '/') . '/';
160+
$query = preg_replace($pattern, $literal, $query);
182161
}
183162

184-
return false;
163+
return $query;
185164
}
186165
}

0 commit comments

Comments
 (0)