Tente ajustar um pouco a lógica. Assim como Phoenix Wright, às vezes basta inverter as coisas para resolvê-las:
$pk = $db->prepare("SELECT `grade` FROM `grading` WHERE ? BETWEEN `min` and `max`");
$pk->execute(array($mark));
$ind = $pk->fetch(PDO::FETCH_ASSOC);
echo $ind['grade'];
Usando um valor como o primeiro operando para
BETWEEN
e IN
não é algo que muitas pessoas pensariam, mas é tão poderoso;) Mais importante (e obrigado a Fred -ii- por acidentalmente me ajudar a perceber),
min
e max
são nomes de funções. Se você quiser usá-los como nomes de coluna, você deve envolvê-los em backticks, como fiz no meu código acima. Como regra geral, você deve sempre coloque acentos graves em torno de seus nomes de tabela e coluna. Não fazer isso é como escrever
$foo = bar;
em PHP. Claro, vai funcionar , mas se bar
acontece de ser uma constante ou nome de função, então todo o inferno se solta.