<?php
function after($subject, $search)
{
return $search === '' ? $subject : array_reverse(explode($search, $subject, 2))[0];
}
function before($subject, $search)
{
if ($search === '') {
return $subject;
}
$result = strstr($subject, (string) $search, true);
return $result === false ? $subject : $result;
}
function foo($databaseEngine, $databaseVersion)
{
if (($databaseEngine === 'mysql' && (
(! strpos($databaseVersion, 'MariaDB') && version_compare($databaseVersion, '8.0.1', '>=')) ||
(strpos($databaseVersion, 'MariaDB') && version_compare(before(after($databaseVersion, '5.5.5-'), '-'), '10.6.0', '>='))
)) ||
($databaseEngine === 'pgsql' && version_compare($databaseVersion, '9.5', '>='))
) {
return 'FOR UPDATE SKIP LOCKED';
}
return true;
}
var_dump(foo('mysql', '5.5.5-10.6.4-MariaDB'));
var_dump(foo('mysql', '5.5.5-10.3.4-MariaDB'));
var_dump(foo('mysql', '5.5.5-10.6.4-MariaDB-log'));
var_dump(foo('mysql', '10.3.31-MariaDB-log - MariaDB Server'));
var_dump(foo('mysql', '10.6.4-MariaDB-log - MariaDB Server'));
var_dump(foo('mysql', '10.3.31-MariaDB-log-cll-lve - MariaDB Server'));
var_dump(foo('mysql', '5.5.5-10.6.4-MariaDB-1:10.6.4+maria~focal'));
var_dump(foo('mysql', '5.5.5-10.3.4-MariaDB-1:10.3.4+maria~focal'));
- Output for 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.4, 8.3.6 - 8.3.25, 8.4.1 - 8.4.12
- string(22) "FOR UPDATE SKIP LOCKED"
bool(true)
string(22) "FOR UPDATE SKIP LOCKED"
bool(true)
string(22) "FOR UPDATE SKIP LOCKED"
bool(true)
string(22) "FOR UPDATE SKIP LOCKED"
bool(true)
- Output for 8.3.5
- Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
string(22) "FOR UPDATE SKIP LOCKED"
bool(true)
string(22) "FOR UPDATE SKIP LOCKED"
bool(true)
string(22) "FOR UPDATE SKIP LOCKED"
bool(true)
string(22) "FOR UPDATE SKIP LOCKED"
bool(true)
preferences:
98.5 ms | 408 KiB | 5 Q