【问题标题】:PHP PDO: method to recognize automatically if a INSERT or UPDATEPHP PDO:自动识别 INSERT 或 UPDATE 的方法
【发布时间】:2012-08-28 03:40:51
【问题描述】:

我正在创建一个类来轻松管理 SQL 命令。我创建了所有 CRUD,现在我正在尝试创建一个名为 save ($ data, $ table) 的新方法。 "save" 必须识别 INSERT 或 UPDATE 是一个句子。

我完全迷失在这一步,我的大脑没有感觉到一种安全有效的方法来识别两个句子中的哪一个。

我的第一个想法是使用主键进行比较...

值存在:更新

值不存在或为空:插入

但是,这是一个弱解决方案。例如,如果恶意用户在表单中发送 ID=5,则自动覆盖 id 为 5 的用户。

我接受建议和解决方案,谢谢!

【问题讨论】:

  • if a malicious user sends ID=5 in form, automatically overwrite the user with id 5 清理表单数据。
  • 或者,你知道,只是准备你的陈述。人们可能会注意到 PDO 恰好以参数化查询而闻名。
  • 什么类型的SQL?微软SQL? MYSQL? POSTGRESQL?
  • @FrankieTheKneeMan 背后的想法不就是使用 PDO 来抽象出数据库的细节吗?
  • @arxanas 连接,是的,但不是您使用的 SQL。语言之间可能存在中断查询的语法差异。

标签: php sql methods pdo


【解决方案1】:

答案分两部分:

  1. 你想要的SQL是

    INSERT(fields) VALUES() ON DUPLICATE KEY UPDATE...

  2. 控制的方法是发送一些其他的唯一标识符,而不是 ID。在您的表中,将主键(自动增量)和“unique_id”随机字符串 md5() 设置为表中的唯一键。发送随机字符串作为标识符。然后根据该随机字符串进行更新。如果它不存在,它将创建一个新记录并自动增加一个主键。

我会比这更深入地验证您是否期待“新”或“更新”,但这种方法似乎符合您的要求。

【讨论】:

    猜你喜欢
    • 2012-09-30
    • 2016-05-21
    • 1970-01-01
    • 2015-01-20
    • 2014-09-09
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多