我一直在尝试做一个小函数来从存储在MySQL数据库中的一组范围中确定等级,即A在80和100之间,A-在74和79之间,依此类推。我正在使用PDO和准备好的语句。但是PDO没有给我结果。有人可以帮我解决这个问题吗?下面是表格预览
<?php
include("./inc/db.php");
//i have set PDO attribute to ERRMODE_EXCEPTION in the connection file
//this code has failed to work
$mark = 85;
try{
$pk = $db->prepare("SELECT * FROM grading WHERE ? BETWEEN min AND max");
$pk->bindParam(1,$mark);
$pk->execute();
$ind=$pk->fetch(PDO::FETCH_ASSOC);
echo $ind['grade'];
} catch(PDOexception $f) {
echo $f->getMessage();
}
//however when i try this it displays the grade. whats wrong with the previous code?
try{
$pk = $db->prepare("SELECT * FROM grading WHERE 85 BETWEEN min AND max");
$pk->execute();
$ind=$pk->fetch(PDO::FETCH_ASSOC);
echo $ind['grade'];
} catch(PDOexception $f) {
echo $f->getMessage();
}
?>
最佳答案
尝试稍微调整一下逻辑。就像Phoenix Wright一样,有时需要花很多时间才能解决问题:
$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'];
很多人不会想到将值用作
BETWEEN
和IN
的第一个操作数,但是它是如此强大;)更重要的是(感谢Fred -ii-偶然帮助我实现了),
min
和max
是函数名。如果要将它们用作列名,则必须像在上面的代码中所做的那样,将它们包装在反引号中。通常,应始终在表名和列名前后加上反引号。不这样做类似于在PHP中编写
$foo = bar;
。当然可以,但是如果bar
恰好是一个常量或函数名,那么所有事情都将变得一团糟。关于php - 在SQL SELECT陈述式和PDO中使用大于等于(> =)和小于等于(<=),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25220619/