在SQL SELECT语句和PDO中使用大于或等于(> =)和小于或等于(< =)

时间:2014-08-09 16:24:06

标签: php mysql pdo

我一直试图用一个小函数来确定存储在MySQL数据库中的一组范围内的等级,即A介于80和100之间,A-介于74和79之间,依此类推。我正在使用PDO和准备好的声明。但PDO并没有给我结果。有人可以帮我解决这个问题.Below是表预览

table review

<?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();   
    }
 ?>

2 个答案:

答案 0 :(得分:0)

尝试稍微调整一下逻辑。就像凤凰赖特一样,有时只需要翻转它来解决它们:

$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'];

使用值作为BETWEENIN的第一个操作数并不是很多人会想到的,但它是如此强大;)


更重要的是(感谢Fred -ii-意外地帮助我意识到),minmax是函数名称。如果你想将它们用作列名,那么必须将它们包装在反引号中,就像我在上面的代码中所做的那样。

作为一般规则,您应该始终在表名和列名周围添加反引号。不这样做类似于在PHP中编写$foo = bar;。当然,它会工作,但如果bar恰好是一个常量或函数名称,那么所有的地狱都会崩溃。

答案 1 :(得分:0)

您可以编写2个不同的查询:

 $pk = $db->prepare("SELECT * FROM grading WHERE max >=:max AND min <=:min");

OR

$pk = $db->prepare("SELECT SOMETHING FROM grading WHERE SOMETHING BETWEEN max AND min");

但在你的情况下,第一个有效。问题是你对min和max

使用相同的变量$mark