$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'附近使用正确的语法
答案 0 :(得分:3)
首先,您的查询对sql injection attacks开放。
其次,要弄清楚为什么会出现语法错误,请将查询构建阶段与实际查询调用分开:
$sql = "SELECT ....";
echo $sql;
$result = mysql_query($sql) or die(...);
这样您就可以看到整个查询。 MySQL的错误消息只报告它认为错误发生的位置的查询部分,但有时它会判断错误并消除错误所在的实际相关部分......所以...检查整个查询。
答案 1 :(得分:1)
"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() );