public static function prepareBindings($sql, $bindings = [])
{
$bindings = array_map(function ($binding) {
if (is_array($binding) === true) {
$binding = implode(',', array_map(function ($value) {
return is_string($value) === true ? htmlspecialchars('\'' . $value . '\'', ENT_NOQUOTES, 'UTF-8') : $value;
}, $binding));
return htmlspecialchars('(' . $binding . ')', ENT_NOQUOTES, 'UTF-8');
}
if ($binding instanceof DateTime) {
return htmlspecialchars('\'' . $binding->format('Y-m-d H:i:s') . '\'', ENT_NOQUOTES, 'UTF-8');
}
return is_string($binding) === true ? htmlspecialchars('\'' . $binding . '\'', ENT_NOQUOTES, 'UTF-8') : $binding;
}, $bindings);
$sql = str_replace(['%', '?'], ['%%', '%s'], $sql);
$sql = vsprintf($sql, $bindings);
return $sql;
}