Mysql错误,我无法搞清楚

时间:2011-10-23 14:47:25

标签: php mysql sql

我正在尝试将数据插入到我的表中:

 $userName="NewOrder";//use cookie to get name;
     $selectCurrentUser=" SELECT user_id FROM users WHERE user_name='$userName'; ";




  mysql_query(" INSERT INTO threads (topic ,date ,views ,user_id ,responses ,closed ,title ,close_voted ,content)
          VALUES('$threadTopic', NOW(), 0, '$selectCurrentUser', 0, 'false', '$threadTitle', 0, '$threadContent');") or die(mysql_error());

      mysql_close();

我的第二个陈述中有一个错误。它说:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近'NewOrder'; ',0,'false','11111111111111111111111',0,'   22222222222222222222'第2行

我的表结构:

פעולה     thread_id int(11)无AUTO_INCREMENT
    topic varchar(50)
    日期日期无
    views int(11)无

    user_id int(11)无

    回复int(11)没有
    closed varchar(10)utf8_unicode_ci无
    title varchar(100)utf8_unicode_ci无
    close_voted int(11)无

    内容文字utf8_unicode_ci无

3 个答案:

答案 0 :(得分:1)

而不是'$selectCurrentUser',请使用($selectCurrentUser)。另外,我认为你不应该在第一个SQL语句的末尾添加分号。

编辑 - 为清楚起见,我的意思是这句话

  mysql_query(" INSERT INTO threads (topic ,date ,views ,user_id ,responses ,closed ,title ,close_voted ,content)
      VALUES('$threadTopic', NOW(), 0, '$selectCurrentUser', 0, 'false', '$threadTitle', 0, '$threadContent');") or die(mysql_error());

应编写如下(用$ selectCurrentUser替换为括号的单引号):

  mysql_query(" INSERT INTO threads (topic ,date ,views ,user_id ,responses ,closed ,title ,close_voted ,content)
      VALUES('$threadTopic', NOW(), 0, ($selectCurrentUser), 0, 'false', '$threadTitle', 0, '$threadContent');") or die(mysql_error());

此外,以下声明

$selectCurrentUser=" SELECT user_id FROM users WHERE user_name='$userName'; ";

应删除第一个分号,如下所示:

$selectCurrentUser=" SELECT user_id FROM users WHERE user_name='$userName' ";

答案 1 :(得分:1)

从错误消息中查看它没有按照您期望的方式获取引号。

 'NewOrder'; ', 0, 'false', '11111111111111111111111', 0, ' 22222222222222222222' at line 2

  $userName="NewOrder";//use cookie to get name;
  $selectCurrentUser=" SELECT user_id FROM users WHERE user_name='$userName'; ";
   mysql_query(" INSERT INTO threads (topic ,date ,views ,user_id ,responses ,closed ,title ,close_voted ,content)
      VALUES('$threadTopic', NOW(), 0, '$selectCurrentUser', 0, 'false', '$threadTitle', 0, '$threadContent');") or die(mysql_error());

  mysql_close();

您只将NewOrder指定为第一个语句并将单引号括起来 - 我认为您不需要在第一个SQL的末尾指定分号。

错误意味着在$ selectCurrentUser

之后,它没有看到$ userName的结尾引用的代码为0

您可以添加其他引号并与之连接。像这样

  $selectCurrentUser=" SELECT user_id FROM users WHERE user_name='".$userName."'"; 

和第二个陈述类似。希望有所帮助。

答案 2 :(得分:1)

这里有几件事:

  1. 我在表结构中看不到名为user_name的字段。这是一个错字,还是你在寻找不存在的数据?
  2. 其次,你不应该在你的第一个语句中使用分隔符,它应该用括号括起来:

    $selectCurrentUser="(SELECT user_id FROM users WHERE user_name='$userName' LIMIT 1)";
    
  3. 如果仍然失败,那么我建议先检索user_id(使用PHP),然后将其显式传递给第二个查询。我会这样做:

    $userName="NewOrder";//use cookie to get name;
    
    $selectCurrentUser = 0;
    
    // retrieve the user_id first
    $result = mysql_query("SELECT user_id FROM users WHERE user_name='$userName' LIMIT 1");
    while($row = mysql_fetch_assoc($result)){
        // set $selectCurrentUser to the only id retrieved
        $selectCurrentUser = $row['user_id'];
    }
    
    // pass the exact user_id to the second query
    mysql_query(" INSERT INTO threads (topic ,date ,views ,user_id ,responses ,closed ,title ,close_voted ,content)
      VALUES('$threadTopic', NOW(), 0, $selectCurrentUser, 0, 'false', '$threadTitle', 0, '$threadContent')") or die(mysql_error());
    
    mysql_close();
    

    注意:我在第二个查询中删除了$selectCurrentUser左右的引号。