我正在尝试将数据插入到我的表中:
$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无
答案 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)
这里有几件事:
user_name
的字段。这是一个错字,还是你在寻找不存在的数据?其次,你不应该在你的第一个语句中使用分隔符,它应该用括号括起来:
$selectCurrentUser="(SELECT user_id FROM users WHERE user_name='$userName' LIMIT 1)";
如果仍然失败,那么我建议先检索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
左右的引号。