所以我有这个表格
<form>Tag name:
<input type='text' name='tagname' />
<input type='submit' value='Add' />
<input type='hidden' name='id' value='$id' />
</form>
<hr />
它运行此脚本
if ($tagname)
{
mysql_query("INSERT INTO tags (id, tag) VALUES ($id, $tagname)");
?>
<script type="text/javascript">
alert("Tag added.");
history.back();
</script>
<?php
}
如果我在表单中插入数字,它很好地添加到sql数据库,但如果它由字母字符组成,我得到警报但没有插入数据库。 我检查了phpmyadmin,如果结构错误(text / varchar / int ...)尝试了大部分但是它们是相同的。
答案 0 :(得分:3)
您需要使用单引号将SQL查询中的字符串括起来:
mysql_query("INSERT INTO tags (id, tag) VALUES ('$id', '$tagname')");
我猜想你也忘记事先申请mysql_real_escape_string
。
答案 1 :(得分:3)
mysql_query("INSERT INTO tags (id, tag) VALUES ($id, '$tagname')");
很常见的错误。考虑转义或更好 - 参数化查询。连接SQL查询是一种非常糟糕的方法(因此,将一小段代码放在一起,HTML,PHP,SQL和JavaScript)
答案 2 :(得分:3)
你的mysql查询中需要大约$ id(除非它是一个数字)和$ tagname的引号。
作为旁注,这很容易受到SQL注入的攻击。</ p>
答案 3 :(得分:2)
我发现你的代码有几个问题,首先设置id输入字段的值:
<input type="hidden" name="id" value="<?php echo $id; ?>" />
然后,在SQL中你应该使用引号:
mysql_query("INSERT INTO tags (id, tag) VALUES ($id, '$tagname')");
答案 4 :(得分:1)
据我所知,根据你的代码,并根据你如何逃避,如果你没有ajax来获取你正在运行的id:
INSERT INTO tags (id, tag) VALUES (0, $tag)
INSERT INTO tags (id, tag) VALUES ('', $tag)
你应该真的跑步:
INSERT INTO tags (tag) VALUES ('$tag')