未知栏目?

时间:2013-05-02 01:21:50

标签: php mysql sql

'字段列表'中的未知列'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"; 
}

3 个答案:

答案 0 :(得分:2)

如果列的数据类型是字符串,那么该值应该用单引号括起来,因为它们是字符串文字,

INSERT INTO comment (name,comment) VALUES ('$name','$comment')

作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

答案 1 :(得分:0)

您需要将字符串放在引号中:

$insert=mysql_query("INSERT INTO comment 
(name,comment) 
VALUES ($name,$comment) " ) 

应该是

$insert=mysql_query("INSERT INTO comment 
(name,comment) 
VALUES ('$name','$comment') " ) 

Please, don't use mysql_* functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

您也对SQL injections

持开放态度

答案 2 :(得分:0)

INSERT INTO comment (name,comment) VALUES ('$name','$comment')

将解决您的问题..但其他开发人员可能已经注意到了,但没有指出..您还没有关闭SQL查询的反引号:

INSERT INTO `comment 

应该是:

INSERT INTO `comment`

对列/表/模式名称使用​​反引号没有任何错误。事实上,建议使用它们,以最大程度地降低运行 SQL保留字的风险。提供它们是打开/关闭的正确