0

下面的代码没有返回任何结果,如果我在 $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);
4

3 回答 3

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 变量可以通过公共表单发送,那么您最终可能会在最好的情况下转储您的数据库。

于 2017-02-17T16:25:33.023 回答
0

查询的第二行存在语法错误 - 如果您想在查询中使用单引号,则需要将其全部括在双引号中:

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

顺便说一句,使用字符串连接构建这样的查询是一个非常糟糕的想法,并且会让您容易受到 SQL 注入攻击 - 您应该使用准备好的语句和参数。

于 2017-02-17T16:21:12.547 回答
0

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

于 2017-02-17T16:24:24.320 回答