如果内容不存在,如何将此代码更改为 INSERT 而不是 UPDATE? [复制]

Posted

技术标签:

【中文标题】如果内容不存在,如何将此代码更改为 INSERT 而不是 UPDATE? [复制]【英文标题】:How can I change this code to INSERT instead of UPDATE if content doesn't exist? [duplicate] 【发布时间】:2014-04-24 16:57:09 【问题描述】:

我有一个查询将更新数据库中的一行,只要那里有一行开头,它就可以正常工作。

怎么说呢?如果存在则更新如果不存在则插入?

    require_once('../scripts/includePDO.php');

    $who = $_SESSION['who'];
    $formText = $_POST['protext'];

$sql = "UPDATE tbl_profiles SET proText = :formText WHERE user_id = :who";

    $q   =  $conn->prepare($sql);
    $q->bindValue(':who',$who,PDO::PARAM_INT);
    $q->bindValue(':formText',$formText,PDO::PARAM_STR);
    $q->execute();

header("Location: ../settings/?status=Done");

【问题讨论】:

【参考方案1】:

假设user_id 是数据库中的唯一键:

$sql = "INSERT INTO tbl_profiles (user_id, proText) VALUES (:who, :formText) ON DUPLICATE KEY UPDATE proText = :formText";

【讨论】:

【参考方案2】:

您的 SQL 查询应该是:

INSERT INTO tbl_profiles (user_id,proText) VALUES (:who,:formText)
ON DUPLICATE KEY UPDATE proText=:formText

这是假设 user_ID 是唯一的 id

【讨论】:

【参考方案3】:

1- 简单的方法是使用 ORM,例如 Dotrine 2- ORM 如何处理这个问题: 通常表的主键(id)不应该为空。如果你有更新,那么你选择加载这个数据。在您选择数据结构(数组或对象或其他东西)中的加载ID字段。在 save 方法中只检查你想要保存的当前行是否有 id(如果这条记录有 id 则它存在并且需要更新,否则你应该保存)。

【讨论】:

以上是关于如果内容不存在,如何将此代码更改为 INSERT 而不是 UPDATE? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将此javascript函数更改为Jquery [关闭]

如何将此 try-finally 更改为 try-with-resources?

如何将此 pl/sql 更改为函数?

如何将此代码从mysqli更改为PDO

如何将此过滤器表达式更改为参数化查询?

如何将此 JSON 字符串更改为特定格式?