2011-11-08 90 views
0

我正在看看,但我似乎沒有找到正確的答案,我遇到了這個問題。每當我運行這個更新MySQL腳本,它會調用錯誤:PHP MySQL更新導致錯誤

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 'Email='[email protected]', Phone='123456780', Address='16 Remote Street',' at line 1 

這是我用來得到這個錯誤的代碼。

<?php 
include ('cfg_prop.php'); 
$firstname = $_POST['firstname']; 
$lastname = $_POST['lastname']; 
$email = $_POST['email']; 
$secondemail = $_POST['secondary']; 
$phone = $_POST['phone']; 
$address = $_POST['address']; 
$country = $_POST['country']; 
$postcode = $_POST['postcode']; 
$company = $_POST['company']; 
$city = $_POST['city']; 

$sql = "UPDATE users SET Firstname='$firstname', Lastname='$lastname', Email='$email', Secondary Email='$secondemail', Phone='$phone', Address='$address', Country='$country', Postcode='$postcode', Company='$company', City='$city' WHERE Username='$userss'"; 
mysql_query($sql) or die(mysql_error()); 
?> 

如果有人可以幫助我,我會非常高興和感激,因爲我似乎無法克服這一點。先謝謝您的幫助。

  • 阿爾特拱
+0

感謝大家的幫助。有效。我真的很感激它們! –

+0

'當您決定哪個答案對您最有幫助時,請點擊答案左側的複選框大綱以將其標記爲已接受的答案。http://stackoverflow.com/faq#howtoask – hsz

+0

@ hsz好。我去做。 –

回答

6

首先 - 你必須從$_POST超全局,因爲容易SQL Injection攻擊逃跑的數據。

$email = mysql_real_escape_string($_POST['email']); 

接下來的事情你canno使用Secondary Email因爲空格會導致一個錯誤。

您必須將colmun的名稱更改爲Secondary_Email

或者只是使用

`Secondary Email` 

代替(但不這樣做 - 列不應該在其名稱中的空格)。

+0

感謝您的安全提示! –

1
Secondary Email 

列中有名稱的空間;你應該使用反引號的符號:

`

所以:

所有的
$sql = "UPDATE users SET Firstname='$firstname', Lastname='$lastname', Email='$email', `Secondary Email`='$secondemail', Phone='$phone', Address='$address', Country='$country', Postcode='$postcode', Company='$company', City='$city' WHERE Username='$userss'"; 
+0

非常感謝。這是最快的答覆,所以我正在投票。有效! –

1

試試這個:

UPDATE users SET 
    Firstname='$firstname', 
    Lastname='$lastname', 
    Email='$email', 
    `Secondary Email`='$secondemail', 
    Phone='$phone', 
    Address='$address', 
    Country='$country', 
    Postcode='$postcode', 
    Company='$company', 
    City='$city' 
WHERE Username='$userss' 

Secondary Email必須在反引號括起來,因爲包含空格。
請記住清理用戶輸入以避免SQL注入。

+0

謝謝,我想把它全部保留在一行中,儘管它很緊湊。 –

+0

@DarayusNanavati:你可以保持一行。我的解決方案更具可讀性,但您可以將新行消除! – Marco

+0

啊,是的,我知道。非常感謝你把它鋪好:)! –

0

逃離現場Secondary Email

$sql = "UPDATE users SET Firstname='$firstname', Lastname='$lastname', Email='$email', `Secondary Email`='$secondemail', Phone='$phone', Address='$address', Country='$country', Postcode='$postcode', Company='$company', City='$city' WHERE Username='$userss'"; 
+0

謝謝,我真的很感激。 –

0

試試這個:

$sql = "UPDATE `users` SET `Firstname`='$firstname', `Lastname`='$lastname', `Email`='$email', `Secondary Email`='$secondemail', `Phone`='$phone', `Address`='$address', `Country`='$country', `Postcode`='$postcode', `Company`='$company', `City`='$city' WHERE `Username`='$userss'"; 

但編寫查詢的這種方法通過SQL注入強烈推薦!

+0

不完全確定你是否在SQL注入位上諷刺,但我正在研究mysql_real_escape_string現在 –

+0

好!當您通過post發送數據時,請始終使用函數mysql_real_escape_string()! – JellyBelly

+0

是的,我會做到這一點 –