2017-02-17 148 views
0

下面的代码在$ dep的代码中使用变量时没有返回任何结果,如果我手动将其中的值置于1,它将返回预期的结果。我试过了,没有引号单引号和双引号。我已经看过,虽然实例载荷和我看不到我在做什么错sql没有返回结果

$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); 
+1

你确定'if(!$ names)'在这里没有失败吗? –

+0

在这里检查错误 –

+0

它是核心代码的一部分,并且工作得很好,我所做的唯一更改是拉动虽然dept_id添加where子句,它在dept_id = 1时工作,但不是当它是像上面代码 –

回答

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变量可以通过公开形式发送,你最终可能会让你的数据库倾倒在最好的c上酶。

0

有查询的第二行有语法错误 - 如果你想在查询单引号,那么你需要附上这一切在双引号:

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

顺便说一句,建立这样的查询,使用字符串连接,是一个非常糟糕的主意,并留下您打开SQL注入式攻击 - 你应该使用预处理语句和参数,而不是。

+0

您错过了第一行的引号错误。在FROM之后,应该有双引号,正如我在答案中指出的那样。我同意SQL注入 –

+0

@MichaelDiPrisco:确实,很好的地方。 –

0

首先作为Fred -ii说确保if语句正确执行。那么如果dept_id是一个整数值,那么你应该不需要单引号scaisEdge说。否则SQL看起来很好。请确保数据库中的记录存在dept_id正在通过。

+0

查看你的代码@Michael Di Prisco是正确的,因为你的报价没有正确排列。用你在你的问题中的引号,sql最终会看起来像这样: 'SELECT topic_id,topic_pid,ispublic,isactive,topic,dept_id FROM'.TOPIC_TABLE 。 'WHERE dept_id ='1'ORDER BY确切地排序。不要正确地将实际的表名称进行解析 –