2012-01-06 15 views
1

考慮一下:PHP的MySQL的句法功能

$query = 'UPDATE ' . $table . 'SET optin_date = NOW() WHERE MD5(email_address) = ' . $email;

而且我得到這個錯誤:

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 '= NOW() WHERE MD5(email_address) = c5dfd29d956b52c1ffa00ce4a06ab' at line 1

我想是到當前時間戳存儲optin_date列使用NOW()函數作爲它的值(我不確定它是如何工作的),只有當來自查詢的散列電子郵件字符串使用mysql中的MD5()與數據庫中的散列電子郵件相匹配。我已經有一列有TIMESTAMP類型和CURRENT_TIMESTAMP默認。

此外,我需要發送郵件確認使用電子郵件地址。這可能嗎?什麼是這樣做的更好的辦法?:

$recipient = 'SELECT * FROM ' . $table . ' WHERE MD5(email_address) = ' . $email;

請幫我在語法和是否有編碼「電子郵件確認訂閱」(至少功能處理散列電子郵件)的一種優雅的方式,你可能想分享,請隨時感謝

+1

使用befor SET空間和$電子郵件已經是一個字符串for mysql例如'MD5(email_address)=「'。$ email。'」' – Rufinus 2012-01-06 06:04:11

回答

1

你了Syntex錯誤在SQL查詢 寫此查詢

$query = "Update '".$table."' SET option_date = NOW() WHERE email_address ='".md5($email)."' "; 
-1

嘗試這樣的:。

$query = "UPDATE " . $table . "SET optin_date = CURRENT_TIMESTAMP 
      WHERE MD5(email_address) = '" . $email . "'"; 
+0

有誰能告訴我爲什麼我得到負面評價? – 2012-01-06 07:41:47

+0

似乎有人只是給所有答案減去。 – 2012-01-07 15:22:40

1

嘗試增加這些``周圍表名和字段名,你也有$表後缺墨空間

$query = 'UPDATE `' . $table . '` SET `optin_date` = NOW() WHERE MD5(`email_address`) = ' . $email; 

你應該也使用.mysql_real_escape_string($電子郵件),而不是隻。$電子郵件的盡頭有 - 安全風險

$query = 'UPDATE `' . $table . '` SET `optin_date` = NOW() WHERE MD5(`email_address`) = ' . mysql_real_escape_string($email); 

當然,除非(因爲它似乎)你的$電子郵件將是一個MD5哈希