mysql:连接正常但响应错误

时间:2010-06-29 02:15:42

标签: php mysql concat

这是我的代码:

    $Line = mysql_real_escape_string(postVar("showline"));
    $Model = mysql_real_escape_string(postVar("showmodel"));
    $NIK = mysql_real_escape_string(postVar("showNIK"));

          $sql ="SELECT NIK,Line,Model FROM inspection_report";
          $sql.="WHERE NIK='".$NIK."' AND Model LIKE '%".$Model."%' AND Line='".$Line."'";
          $sql.="ORDER BY Inspection_datetime DESC LIMIT 0 , 30";

$dbc=mysql_connect(_SRV, _ACCID, _PWD) or die(_ERROR15.": ".mysql_error());
mysql_select_db("qdbase") or die(_ERROR17.": ".mysql_error());
$res=mysql_query($sql) or _doError(_ERROR30 . ' (<small>' . htmlspecialchars($sql) . '</small>): ' . mysql_error() );  // submit SQL to MySQL and error trap.
$num=mysql_affected_rows();
$objJSON=new mysql2json();
print(trim($objJSON->getJSON($res,$num,'aaData',false)));

mysql_free_result($res);

在firebugs显示连接到进程页面确定...但在响应显示错误.. 我的错在哪里?

4 个答案:

答案 0 :(得分:1)

我假设那是PHP。

在上面的行之后添加命令echo $sql;。我打赌您的查询格式不正确,即FROM子句的末尾与WHERE之间没有空格。与ORDER BY相同。一直发生;)

答案 1 :(得分:1)

Jason说的很好,会告诉你错误的位置,看起来像换行符中缺少空格。在WHERE之前添加空格,在ORDER

之前添加另一个空格

答案 2 :(得分:0)

通过在一组引号中声明SQL字符串,我发现编写和读取我的SQL语句更容易:

$sql ="SELECT NIK,Line,Model FROM inspection_report
WHERE NIK='$NIK' AND Model LIKE '%$Model%' AND Line='$Line'
ORDER BY Inspection_datetime DESC LIMIT 0 , 30";

此方法还可以解决线条之间缺少空格的问题。

答案 3 :(得分:0)

如其他答案中所述,您的查询中缺少空格:

$sql = "SELECT .... inspection_report";
$sql .= "WHERE NIK=..."
etc...

将生成一个查询字符串:

SELECT ... inspection_reportWHERE NIK=...
                           ^^--- problem is here

请注意WHERE子句之前缺少空格。您必须修改字符串连接语句以显式包​​含空格:

$sql = "SELECT ... inspection_report";
$sql .= " WHERE NIK=..."
         ^---notice the space here

或使用替代语法来构建字符串。对于多行字符串赋值,通常总是优先使用HEREDOC s,,除非需要将函数调用结果或常量连接到字符串中:

$sql = <<<EOL
SELECT ... inspection report
WHERE NIK=...
EOL;

PHP将尊重heredoc中的换行符,MySQL会默默地将它们视为空格,从而保持查询的完整性。