我正在運行以下內容,只是作爲一個測試,看看我是否已得到這部分腳本的正確,我已經在mysql數據庫中有如下記錄: 如果以我的形式I將上面的信息放到每個表單域中並點擊提交,會發生什麼情況是選擇等於發佈的引用名和emailformname的記錄,並使用[datesent]字段中的新日期更新具有相同引用名和emailformname的記錄在形式中。更新記錄上的Mysql錯誤
於是我運行以下命令:
<?php
$query = mysql_query("IF EXISTS(SELECT * FROM hqfjt_email_history WHERE leadname='$_POST[leadname]' AND emailformname='$_POST[emailformname]')
THEN UPDATE hqfjt_email_history (datesent) VALUES ('$_POST[datesent]') WHERE emailformname='$_POST[emailformname]' AND leadname='$_POST[leadname]'
") or die(mysql_error());
?>
但不是更新的那場我得到的錯誤:
您的SQL語法錯誤;順便說一下,我不能使用no()函數來檢查與你的MySQL服務器版本相對應的手冊,以便在'IF EXISTS(SELECT * FROM hqfjt_email_history WHERE leadname ='Brian Cox'AND email'at line 1'重複的鍵索引方法更新記錄的各種原因,因此,爲什麼我需要通過兩個字段leadname和emailformname確定記錄。
我不能看到上述查詢失敗的原因,除了我的錯誤編碼(可能問題),因爲DB中只有一條記錄,並且這兩個字段= true。
~~~~~~~~~~~~~~~~~~~~~~~~ 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
感謝大家的幫助,現在這是正確的,如果我想插入空記錄?,即時消息不知道如何消毒我最後添加的部分雖然?
<?php
$sql = "IF EXISTS (
SELECT * FROM hqfjt_email_history
WHERE leadname= '" . mysql_real_escape_string($_POST['leadname']) . "'
AND emailformname = '" . mysql_real_escape_string($_POST['emailformname']) . "'
)
THEN
UPDATE hqfjt_email_history
SET datesent = '" . mysql_real_escape_string($_POST['datesent']) . "'
WHERE emailformname = '" . mysql_real_escape_string($_POST['emailformname']) . "'
AND leadname = '" . mysql_real_escape_string($_POST['leadname']) . "'
ELSE
INSERT INTO hqfjt_email_history
(id, leadname, emailformname, datesent) VALUES ('$_POST[id]','$_POST[leadname]','$_POST[emailformname]','$_POST[datesent]')";
$query = mysql_query($sql) or die(mysql_error());
?>
我想你應該考慮消毒您的文章將它們轉儲到查詢中之前的值。這將防止注射。 – 2011-12-29 13:39:55