未知的列


Unknown column?

字段列表中未知列'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注入