2013-05-02 59 views
1

未知列「阿布」在「字段列表」 所以這裏是一個小評論框,我就 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"; 
} 

回答

2

如果列的數據類型爲字符串,則該值應使用單引號,因爲它們是字符串文字包裹,

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

一點題外話,查詢如果變量的值(s)來自外部,則易受損於SQL Injection。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。

+1

哇感謝關閉! 是的,我寧願使用PDO,但我的主機不提供它。可悲.. 我會研究如何防止SQL注入。感謝您的鏈接! – Abu 2013-05-02 01:26:26

+0

不客氣':'' – 2013-05-02 01:27:22

+0

所以我唯一的問題就是SQL的東西,我只是把它做成非直接入口? $ dbconnection() – Abu 2013-05-02 01:29:18

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

+0

是的,我會讓我的代碼更現代化。我只是重新編寫PHP代碼,而最後一次使用時間大概是10年秋天。 – Abu 2013-05-02 01:31:36

+0

是的,現在去學習pdo。 /阻止評論頁面 – Abu 2013-05-02 01:35:45

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

大開將解決您的問題。但一些其他的開發者可能已經注意到了,但沒有指出..你沒有關閉您的SQL的反引號查詢:

INSERT INTO `comment 

應該是:

INSERT INTO `comment` 

沒有什麼錯在使用的列/表/架構名反引號..逸岸,他們建議,在運行到SQL保留字 ..提供了他們是開放的風險最小化/正確

+0

不知道SQL保留字是什麼,但是完成了。感謝提示 – Abu 2013-05-02 01:49:33

+0

@ user2288998 http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html這篇文章評論可能的錯誤信息,並對保留字的含義進行監督 – 2013-05-02 01:50:47