我正在爲通訊訂閱者撰寫HTML表單。到目前爲止形式通過在MySQL表獨特的subscriber_email領域和使用忽略重複的條目:這是使用PHP更新/插入記錄的正確方法嗎?
"INSERT IGNORE INTO newsletter_subscriber_popup (subscriber_name, subscriber_email) VALUES ('$subscriber_name', '$subscriber_email')";
我試圖改進形式,以便它更新其他字段時,電子郵件中已經存在表,如果電子郵件不存在,則它插入一條新記錄。對於我這樣做(到目前爲止,它的工作原理,但我覺得這是不這樣做正確的方法):當subscriber_email存在
//HTML form variables----------------------------------------------------//
$subscriber_name = mysql_real_escape_string($_POST['subscriber_name']);
$subscriber_email = mysql_real_escape_string($_POST['subscriber_email']);
//Try update into DB---------------------------------------------------------//
$sqlUpdate =
"UPDATE newsletter_subscriber_popup
SET subscriber_name = '$subscriber_name'
WHERE subscriber_email = '$subscriber_email'";
if(!mysql_query($sqlUpdate)){
//Insert into DB--------------------------------------------------------//
$sqlInsert =
"INSERT IGNORE INTO newsletter_subscriber_popup (subscriber_name, subscriber_email)
VALUES ('$subscriber_name', '$subscriber_email')";
if(!mysql_query($sqlInsert)){
die('Error: ' .mysql_error());
}
}
腳本工作以及更新等領域,但它失敗何時應該插入新的記錄。
編輯----------------------------
ON DUPLICATED密鑰更新就是我一直在尋找對於。當subscriber_email已存在時,腳本現在更新其他字段,並在subscriber_email不存在時插入新記錄。
//HTML form variables----------------------------------------------------//
$subscriber_name = mysql_real_escape_string($_POST['subscriber_name']);
$subscriber_email = mysql_real_escape_string($_POST['subscriber_email']);
//Insert into DB--------------------------------------------------------//
$sqlName =
"INSERT IGNORE INTO newsletter_subscriber_popup (subscriber_name, subscriber_email)
VALUES ('$subscriber_name', '$subscriber_email')
ON DUPLICATE KEY UPDATE subscriber_name = '$subscriber_name'";
if(!mysql_query($sqlName)){
die('Error: ' .mysql_error());
}
注:感謝所有有關SQL注入的建議,但問題不是安全問題。
*「這是用PHP更新/插入記錄的正確方法嗎?」 - - 你試過了嗎?得到的錯誤? –
您的問題標題與問題相矛盾。你應該使用的是準備好的語句,並刪除舊的'mysql_'的東西。 –
[您的腳本存在SQL注入攻擊風險。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –