内部加入mysql,语法错误,关于php查询

时间:2011-10-23 15:41:13

标签: php mysql sql

       $threadID=$_GET['threadID'];

            $result=mysql_query("
            SELECT * FROM threads AS Threads
            INNER JOIN users AS Users ON Threads.user_id=Users.user_id 
            WHERE thread_id='$threadID' LIMIT 1
            ") or die(mysql_error());

我明白了:

  

你的SQL语法有错误;检查对应的手册   到您的MySQL服务器版本,以便在''11'附近使用正确的语法   第3行

之前我写过很多内部联接。为什么我的语法错误接近查询结尾

更新:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第3行的“12”LIMIT 1'附近使用正确的语法

3 个答案:

答案 0 :(得分:3)

首先,您的查询对sql injection attacks开放。

其次,要弄清楚为什么会出现语法错误,请将查询构建阶段与实际查询调用分开:

$sql = "SELECT ....";
echo $sql;
$result = mysql_query($sql) or die(...);

这样您就可以看到整个查询。 MySQL的错误消息只报告它认为错误发生的位置的查询部分,但有时它会判断错误并消除错误所在的实际相关部分......所以...检查整个查询。

答案 1 :(得分:1)

啊,可能是我知道的答案 我相信在mysql中有一个叫做"strict mode"的东西,它对数据类型过于挑剔。

尝试像这样进行查询

   $id  = (int)$_GET['threadID']; 
   $sql = "SELECT * FROM threads t INNER JOIN users u ON t.user_id=u.user_id  
           WHERE thread_id=$id LIMIT 1"; 
   $res = mysql_query($sql) or trigger_error(mysql_error().$sql);

答案 2 :(得分:0)

为什么不以这种方式加入您的查询:

$threadID = mysql_real_escape_string( $_REQUEST['threadID'] ); // Get some cleanup in there...

$result=mysql_query("SELECT threads.*, users.*
FROM threads, users 
WHERE threads.user_id = users.user_id 
AND threads.thread_id = '$threadID' 
LIMIT 1
") or die( mysql_error() );