下面的代码返回没有结果,我在$ 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);
答案 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
的契约记录。