我一直在尝试做一个小函数来从存储在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'];


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



更重要的是(感谢Fred -ii-偶然帮助我实现了),minmax是函数名。如果要将它们用作列名,则必须像在上面的代码中所做的那样,将它们包装在反引号中。

通常,应始终在表名和列名前后加上反引号。不这样做类似于在PHP中编写$foo = bar;。当然可以,但是如果bar恰好是一个常量或函数名,那么所有事情都将变得一团糟。

关于php - 在SQL SELECT陈述式和PDO中使用大于等于(> =)和小于等于(<=),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25220619/

10-09 01:00