2010-07-13 47 views
-2

我試圖改變與PHP數據庫條目,但仍堅持這一錯誤消息 「在您的SQL語法錯誤」:MySQL的

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 'Bjelkholm Lövgren AND adress = Brinellgatan 14 AND postnummer = 57135 ' at line 1

代碼:

$namn = sanitize($_GET['namn']); 
$adress = sanitize($_GET['adress']); 
$postnummer = sanitize($_GET['postnummer']); 
$postort = sanitize($_GET['postort']); 
$email = sanitize($_GET['email']); 
$status = 0; 
$sql="UPDATE ordrar SET namn = $namn AND adress = $adress AND postnummer = $postnummer 
AND postort = $postort AND email $email AND status = $status WHERE email = $email"; 
if (!mysql_query($sql)) 
{ 
    die('Error: ' . mysql_error()); 
} 

謝謝尋求答案。 /維克托

+0

是什麼消毒()函數呢? – 2010-07-13 03:34:26

+0

上校彈片,清除從惡代碼中的變量。 – 2010-07-13 04:35:17

+0

恐怕沒有「惡碼」進行清潔。也許,這個函數不需要的東西和無用的。 – 2010-07-13 04:39:20

回答

3
  1. SET語句值分隔符是逗號,不是和
  2. 字符串值應該被引用

爲了使SET語句這將是很好用的一個小功能

function dbSet($fields) { 
    $set=''; 
    foreach ($fields as $field) { 
    if (isset($_POST[$field])) { 
     $set.="`$field`='".mysql_real_escape_string($_POST[$field])."', "; 
    } 
    } 
    return substr($set, 0, -2); 
} 

和不只是

$table = "ordrar"; 
$email = mysql_real_escape_string($_POST['email']); 
$fields = explode(" ","namn adress postnummer postort email status"); 
$query = "UPDATE $table SET ".dbSet($fields)." WHERE email='$email'"; 

會給你帶來格式正確的查詢

但是,使用電子郵件進行行標識是不好的。 我會建議使用自動增量ID字段來識別您的記錄,而不是電子郵件。

1

引用您的變量(即ADRESS =「$ ADRESS」)

0

假設這些值是字符串,你應該說出來了在你的查詢字符串,再加上你缺少比較電子郵件時等號。

$sql="UPDATE ordrar SET namn = '$namn' AND adress = '$adress' AND postnummer = '$postnummer' 
AND postort = '$postort' AND email = '$email' AND status = '$status' WHERE email = '$email'"; 
0

兩件事情:

  • 你的字符串需要加引號(逃跑)。
  • 對於SET條款中的電子郵件,您缺少=
0

簡短的回答是,你有一堆的語法錯誤。首先,您需要正確引用列名和值。列名得到一個嚴重(側面引用),值得到一個正常的單引號。其次,您在$ email變量前錯過了一個等號。

可能我建議把它分成多行,這有助於更容易調試。

$sql="UPDATE `ordrar` 
    SET `namn` = '$namn' AND 
    `adress` = '$adress' AND 
    `postnummer` = '$postnummer' AND 
    `postort` = '$postort' AND 
    `email` = '$email' AND 
    `status` = '$status' 
    WHERE `email` = '$email'"; 

最後一個建議,考慮binding your parameters using prepared statements而不是字符串插值。他們更安全,我個人覺得他們更容易寫。

+0

究竟發生了什麼錯誤的答案被接受? – 2010-07-13 04:55:54

0

$名稱= sanitize方法($ _ GET [ '名稱']);

地址$ = sanitize方法($ _ GET [ '地址']);

$ =消毒後置碼($ _ GET [ '郵政編碼']);

$城市的sanitize =($ _ GET [ '城市']);

$電子郵件的sanitize =($ _ GET [ '電子郵件']);

$狀態= 0;

$ SQL =「UPDATE命令SET 名= '$名稱' 地址= '$地址', 郵政編碼= '$郵編', 城市='$城市, 電子郵件= $電子郵件「 , 狀態= '$狀態' WHERE電子郵件= $電子郵件「「;

如果(MYSQL_QUERY($ SQL)!){ 模( '錯誤' Mysql_error()); }

試試這個。希望它的工作以及;-)