sql返回没有结果

时间:2017-02-17 16:16:06

标签: php mysql osticket

下面的代码返回没有结果,我在$ dep的代码中使用变量,如果我手动将值1设置为返回预期结果。我试过没有引号单引号和双引号。我看了很多例子,我看不出我做错了什么

$dep = 1;
    if (!$names) {
        $sql = "SELECT topic_id, topic_pid, ispublic, isactive, topic, dept_id FROM '.TOPIC_TABLE
            . ' WHERE dept_id='$dep' ORDER BY `sort`";
        $res = db_query($sql);

3 个答案:

答案 0 :(得分:3)

我很确定您的错误与使用的错误引号有关。 在你的代码中,你写了

$sql = "SELECT topic_id, topic_pid, ispublic, isactive, topic, dept_id FROM '.TOPIC_TABLE
        . ' WHERE dept_id='$dep' ORDER BY `sort`";

在FROM之后,您使用的是单引号('),但您的整个查询已被括在双引号(“)中,因此会产生问题。

应该是:

$sql = "SELECT topic_id, topic_pid, ispublic, isactive, topic, dept_id FROM ".TOPIC_TABLE
        . " WHERE dept_id='$dep' ORDER BY `sort`";

编辑:忘了指出你应该认真使用PDO或任何其他SQL注入预防方法。如果在任何情况下,您的$ dep变量可以通过公共表单发送,最终可能会以最佳情况丢弃您的数据库。

答案 1 :(得分:0)

查询的第二行有一个语法错误 - 如果你想在查询中使用单引号,那么你需要将它全部用双引号括起来:

$sql = "SELECT topic_id, topic_pid, ispublic, isactive, topic, dept_id FROM ' .TOPIC_TABLE
            . " WHERE dept_id='$dep' ORDER BY `sort`";

顺便说一句,使用字符串连接构建这样的查询是一个非常糟糕的想法,让你对SQL注入攻击开放 - 你应该使用预备语句和参数。

答案 2 :(得分:0)

首先,正如Fred -ii所说,确保if语句正确执行。然后,如果dept_id是一个整数值,那么你不应该像scaisEdge所说的那样需要单引号。另外,SQL看起来很好。确保数据库中存在正在传入的dept_id的契约记录。