字段列表中未知列'Abu'这是我正在做的一个小评论框http://abu.cpvp.net/cupcakes.php当我输入我的名字和评论,它不会工作,但是,如果我把名字为名称字段和评论为评论字段它工作????这是我的脚本
$name=$_POST['name'];
$comment=$_POST['comment'];
$submit=$_POST['post'];
if($_POST['name'] && $_POST['comment'] && $submit)
{
$insert=mysql_query("INSERT INTO `comment (`name`,`comment`)
VALUES ($name,$comment) " ) or die(mysql_error());
}
else
{
echo "please fill out all fields";
}
如果列的数据类型是字符串,那么该值应该用单引号包装,因为它们是字符串字面值,
INSERT INTO comment (name,comment) VALUES ('$name','$comment')
作为旁注,如果变量的值(s)来自外部,则查询容易受到SQL Injection
的攻击。请看看下面的文章,了解如何防止它。通过使用PreparedStatements
,您可以摆脱使用单引号的值。
- 如何防止SQL注入在PHP?
INSERT INTO comment (name,comment) VALUES ('$name','$comment')
将解决您的问题…但其他开发者可能已经注意到了,但没有指出……SQL查询
没有关闭反勾号INSERT INTO `comment
应该是:
INSERT INTO `comment`
在列/表/模式名称中使用反引号并没有错。事实上,建议使用它们,以尽量减少遇到SQL保留字的风险。只要它们正确打开/关闭
您需要将字符串放在引号中:
$insert=mysql_query("INSERT INTO comment
(name,comment)
VALUES ($name,$comment) " )
应该$insert=mysql_query("INSERT INTO comment
(name,comment)
VALUES ('$name','$comment') " )
请不要在新代码中使用mysql_*
函数。它们不再被维护,并被正式弃用。看到那个红框了吗?学习预处理语句,并使用PDO或MySQLi——本文将帮助您决定使用哪一种。如果你选择PDO,这里有一个很好的教程。
您也可以使用SQL注入