首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql错误,我想不出

Mysql错误,我想不出
EN

Stack Overflow用户
提问于 2011-10-23 14:47:24
回答 3查看 86关注 0票数 0

我试图将数据插入到我的表中:

代码语言:javascript
复制
 $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”、“11111111111111111”、0、“22222222222222222222”在第2行。

我的桌子结构:

thread_id int(11) None AUTO_INCREMENT

代码语言:javascript
复制
 topic   varchar(50)
代码语言:javascript
复制
 date    date                None
代码语言:javascript
复制
 views   int(11)             None
代码语言:javascript
复制
 user\_id int(11)             None
代码语言:javascript
复制
 responses   int(11)             None
代码语言:javascript
复制
 closed  varchar(10) utf8\_unicode\_ci     None
代码语言:javascript
复制
 title   varchar(100)    utf8\_unicode\_ci     None
代码语言:javascript
复制
 close\_voted int(11)             None
代码语言:javascript
复制
 content text    utf8\_unicode\_ci         None
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-23 15:17:33

这里有几件事:

  1. 我没有在您的表结构中看到一个名为user_name的字段。这是一个错误,或者您可能在寻找不是there?
  2. Secondly,的数据--您不应该在第一个语句中使用分隔符,它应该被方括号包围,如下所示:

$selectCurrentUser=“(从用户中选择user_id =‘$userName’极限1)”;如果仍然失败,则建议先检索user_id (使用user_id),然后显式地将其传递给第二个查询。我会这样做:

$userName=“NewOrder”;//使用cookie获取名称;$selectCurrentUser = 0;//检索user_id first $result =mysql_query(“从用户选择user_id,其中user_name=‘$用户名’限制1");而($row= mysql_fetch_assoc($result)){ // set $selectCurrentUser到唯一检索到的id‘user_id’;} //将确切的user_id传递给第二个查询mysql_query(“插入到线程(主题、日期、视图、user_id、响应、关闭的、标题、close_voted、内容)值”(‘$线程topic’,NOW(),0,$selectCurrentUser,0,'false',‘false’,‘$ title’,0,‘$threadContent’)或死(mysql_error();mysql_close();

注意:我在第二个查询中从$selectCurrentUser中删除了引号.

票数 1
EN

Stack Overflow用户

发布于 2011-10-23 14:54:36

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

编辑-为了清晰起见,我的意思是

代码语言:javascript
复制
  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周围的单引号):

代码语言:javascript
复制
  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());

此外,以下语句

代码语言:javascript
复制
$selectCurrentUser=" SELECT user_id FROM users WHERE user_name='$userName'; ";

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

代码语言:javascript
复制
$selectCurrentUser=" SELECT user_id FROM users WHERE user_name='$userName' ";
票数 1
EN

Stack Overflow用户

发布于 2011-10-23 14:55:52

从错误消息中可以看出,它没有按照您预期的方式使用引号。

代码语言:javascript
复制
 '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的末尾指定分号。

错误意味着它没有看到从$userName的末尾引号到$selectCurrentUser之后的0的代码。

您可以添加更多的引号和连接。像这样

代码语言:javascript
复制
  $selectCurrentUser=" SELECT user_id FROM users WHERE user_name='".$userName."'"; 

第二项声明也是如此。希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7866829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档