<?php
function checkParameters(string $sql) {
$countNamed = 0;
$countUnnamed = 0;
$inQuote = false;
for ($i = 0; $i < strlen($sql); ++ $i) {
if ($inQuote) {
if ($sql[$i] == $quote) {
$inQuote = false;
continue;
}
}
else {
if (in_array($sql[$i], ['"', "'"])) {
$quote = $sql[$i];
continue;
}
}
if ($sql[$i] == ':') {
$countUnnamed ++;
}
elseif ($sql[$i] == '?') {
$countNamed ++;
}
}
if ($countNamed && $countUnnamed) {
throw new Exception("mixed parms in: $sql" . PHP_EOL);
}
}
$sql = "SELECT a, b FROM someTable WHERE a = '?' AND b = :id";
// checkParameters($sql);
$sql = "SELECT a, b FROM someTable WHERE a = ? AND b = :id";
// checkParameters($sql);
$sql = "SELECT a, b FROM someTable WHERE a = '?' AND b = :id";
checkParameters($sql);
Fatal error: Uncaught Exception: mixed parms in: SELECT a, b FROM someTable WHERE a = '?' AND b = :id
in /in/Rc7B6:32
Stack trace:
#0 /in/Rc7B6(44): checkParameters('SELECT a, b FRO...')
#1 {main}
thrown in /in/Rc7B6 on line 32
Process exited with code 255.