2013-05-01 65 views
0

我試圖做一個令人難以置信的基本形式,將名字,姓氏和年齡添加到名爲Test的非常基本的數據庫。這裏是我的HTML代碼:非常簡單的MySQL語法錯誤,我是新來的

<html> 

<head> 
</head> 

<body> 

<h1>Welcome!</h1> 
<br> 

<form action="insert.php" method="post"> 
Firstname: <input type="text" name="firstname"> 
Lastname: <input type="text" name="lastname"> 
Age: <input type="text" name="age"> 
<input type="submit"> 
</form> 

<input type="submit"> 
</form> 

</body> 

</body> 

</html> 

,這是我的PHP代碼,與數據庫名,主機和登錄信息隱藏:

<?php 
$con=mysqli_connect("HOST","USER","PASS","DB"); 
// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

$sql= "INSERT INTO Test ('First Name', 'Last Name', 'Age') 
     VALUES 
     ('$_POST[firstname]','$_POST[lastname]','$_POST[age]')"; 

if (!mysqli_query($con,$sql)) 
    { 
    die('Error: ' . mysqli_error($con)); 
    } 
echo "1 record added"; 

mysqli_close($con); 
?> 

這是我的錯誤,當我到的數據類型形成並提交。 ,我進入這個網頁:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''First Name', 'Last Name', 'Age') VALUES ('Robert','Maxwell','18')' at line 1 
+2

使用back ticks而不是'''引用您的列名稱。 – Musa 2013-05-01 03:57:28

+0

我懷疑你的字段標題有空格。 – hsuk 2013-05-01 04:02:56

+2

在你做任何事情之前,請閱讀[使用SQL佔位符](http://bobby-tables.com)瞭解如何[避免SQL注入漏洞](http://bobby-tables.com/)/PHP)。你在這裏做的事完全是魯莽的,讓你面對各種嚴峻的問題。 'mysqli'具有[bind_param](http://php.net/manual/en/mysqli-stmt.bind-param.php)方法,可以很容易地正確和安全地執行此操作。 – tadman 2013-05-01 04:14:00

回答

3

變化

$sql= "INSERT INTO Test ('First Name', 'Last Name', 'Age') 

$sql= "INSERT INTO Test (`First Name`, `Last Name`, `Age`) 

;-)

+1

這是如果堅持要成爲那個傢伙*並且在他們的列名中有空格的話。 – tadman 2013-05-01 05:19:16

+0

非常感謝您的幫助。我正在研究自己的語法。我知道,現在這很可怕。 – 2013-05-01 23:14:04

1

您的查詢不正確,你不會有空格你列的表 - 他們必須是駱駝案例(名字)或下劃線(名字)

$sql= "INSERT INTO Test (`First_Name`, `Last_Name`, `Age`) 
    VALUES 
    ('$_POST[firstname]','$_POST[lastname]','$_POST[age]')"; 

$sql= "INSERT INTO Test (`FirstName`, `LastName`, `Age`) 
    VALUES 
    ('$_POST[firstname]','$_POST[lastname]','$_POST[age]')"; 

注意:不要在生產中不能使用,你的查詢被曝光。研究保護您的SQL注入查詢。

+1

你的列名實際上可以有空格,這只是一個**真的**不好主意 – Phil 2013-05-01 04:46:16

+0

@phil ...我不知道,謝謝!但是就像你說的,一個壞主意,所以我不會很快使用它:) – 2013-05-01 04:50:29

+0

MySQL的表名分隔符是反向的,而不是常規的分隔符。 – tadman 2013-05-01 05:18:42