php - 这是使用 PHP 更新/插入记录的正确方法吗?

标签 php html mysql forms

我正在为时事通讯订阅者编写 HTML 表单。到目前为止,该表单通过使subscriber_email字段在mysql表中唯一并使用以下命令来忽略重复条目:

"INSERT IGNORE INTO newsletter_subscriber_popup (subscriber_name, subscriber_email) VALUES ('$subscriber_name', '$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());
        }
    }

当subscriber_email存在并且更新其他字段时,脚本可以工作,但当它应该插入新记录时,脚本就会失败。

编辑----------------------------------------

重复 key 更新正是我正在寻找的。现在,当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 注入(inject)的所有建议,但问题与安全性无关。

最佳答案

INSERT .. ON DUPLICATE KEY UPDATE 可能正是您正在寻找的。请参阅https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

不过,您需要对subscriber_email 有一个唯一的约束。

关于php - 这是使用 PHP 更新/插入记录的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32095657/

相关文章:

php - mySQL - 根据一个字段对表中的列求和

php - 如何在 PHP 中使用下拉列表框更新表中的数据?

php - 选择员工姓名,他/她的 ID 将显示在 PHP 的文本框中

html - 为什么不 -moz-background-size :cover work in Firefox?

mysql - 如何将数据输入到 Windows 8 应用程序的 Web 服务中?

java - Spring , hibernate : issue with creating new @Entity model

php - 英国(例如美国或德国)的 Magento 州/省选项下拉列表

php - 需要检查网站是否包含 ssl 证书,如果是,那么使用 php 脚本证书的过期日期是多少

javascript - phonegap - 动态添加 javascript

javascript - jQuery 函数更改 html 元素上 "value"属性的值