<?php
$_GET['user_id'] = 3;
$query[] = "select * from preferences user_id = ";
$query[] = $_GET['user_id'];
db_exec($query);
function db_exec(string|array $query_parts)
{
if (is_string($query_parts) && !is_literal($query_parts)) {
throw new \Exception("Cannot use non literal string as query.
Please pass the parts in as an array");
} else {
foreach ($query_parts as $query_part) {
if (is_string($query_part) && !is_literal($query_part)) {
throw new \Exception("non-literal string found [$query_part]");
}
else if (is_int($query_part)) {
// todo - decide if you want to allow this or not.
// I personally wouldn't.
}
else {
// todo - support other types
}
}
var_dump(implode("", $query_parts));
}
// rest of db_exec here...
}
Fatal error: Uncaught Error: Call to undefined function is_literal() in /in/aCFIT:17
Stack trace:
#0 /in/aCFIT(8): db_exec(Array)
#1 {main}
thrown in /in/aCFIT on line 17
Process exited with code 255.
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
Fatal error: Uncaught Error: Call to undefined function is_literal() in /in/aCFIT:17
Stack trace:
#0 /in/aCFIT(8): db_exec(Array)
#1 {main}
thrown in /in/aCFIT on line 17
Process exited with code 255.
Output for 7.3.0 - 7.3.33, 7.4.0 - 7.4.33
Parse error: syntax error, unexpected '|', expecting variable (T_VARIABLE) in /in/aCFIT on line 10
Process exited with code 255.