【问题标题】:PHPMySQL: How to determine if value already exists in databasePHP MySQL:如何确定数据库中是否已存在值
【发布时间】:2013-10-02 23:06:08
【问题描述】:

我有一个表单按钮,我需要根据用户输入以及该输入是否已存在于我的数据库中来做两件不同的事情。如果输入不存在,则该按钮将创建一个新记录。如果它确实存在,那么现有记录将被更新。

这是我现在的 PDO 查询:

/* First, we need to discover whether the Proposal No. entered already exists in the
database. If it doesn't, then a new record will be created. If                                                                            
it does, then an existing record will be updated. */
$pNoExists = $con->prepare("SELECT ProposalNo FROM ptfp1"); 
$pNoExists->execute();
$row = $pNoExists->fetch(PDO::FETCH_ASSOC);

当我运行 $row = $pNoExists->fetch(PDO::FETCH_ASSOC);通过一个while循环,该字段的所有值都存在。现在我只需要一些关于如何在我的按钮设置中使用它的指导。这就是我想做的:

if($_POST['ButtonPush'] && input doesn't exist) {
  Create new record;
}
else {
  Update existing record;
}

很简单,对吧?但它在躲避我。

【问题讨论】:

  • 在 SQL 语句中添加 WHERE 子句可能会有所帮助,而不是获取每个提案然后在 PHP 中循环:让数据库做它设计好的事情
  • 你可以使用$count = mysqli_num_rows($con, "SELECT * FROM table WHERE ProposalNo = '$value'");如果$count大于1,更新现有的。
  • 为什么不直接使用INSERTON DUPLICATE KEY UPDATE 子句一步到位?
  • @MarkBaker:谢谢。这就是我最终做的。 :-)
  • @Bamar:谢谢!很有帮助。

标签: php mysql pdo parameterized-query


【解决方案1】:

鉴于你有什么,我会做:

if($_POST['ButtonPush'] && array_search($all_values, $input_value)) {
    Create new
}
else {
    Update
}

但是,就像上面的评论一样,您可能只想在“SELECT”语句中添加一个 where 子句,这样您就不会每次都获取整个数据库表的内容。而且,甚至可以将 SELECT 转换为 SELECT COUNT 以减少请求的数据量。

【讨论】:

    【解决方案2】:

    您可以使用 SELECT count(*) FROM ptfp1 WHERE ProposalNo = :input

    比检查你得到的值是否大于一。如果是,请更新:

    UPDATE ptfp1 set ... where ProposalNo = :input

    其他

    插入 ptfp1(...) 值 (...)

    【讨论】:

      【解决方案3】:

      假设ProposalNo在表中有唯一索引,你可以在一个查询中完成所有操作:

      INSERT INTO ptfp1 (ProposalNo, colA, colB, colC, ...)
      VALUES (:ProposalNo, :colA, :colB, :colC, ...)
      ON DUPLICATE KEY
          UPDATE colA = VALUES(colA), colB = VALUES(colB), colC = VALUES(colC), ...
      

      Documentation

      【讨论】:

        【解决方案4】:

        想出了一个答案。只需在我的 SELECT 语句中使用用户的输入(存储在会话变量中):

        $pNoExists = $con->prepare("SELECT ProposalNo FROM ptfp1 WHERE ProposalNo =                                                                                                                             
        '".$_SESSION['ProposalNo']."'"); 
        $pNoExists->execute();
        $row = $pNoExists->fetch(PDO::FETCH_ASSOC);
        

        还有按钮:

        if($_POST['ButtonPush'] && !$row['ProposalNo']) {
          Write new record;
        }
        else {
          Update existing record;
        }
        

        隐藏在众目睽睽之下!

        【讨论】:

          猜你喜欢
          • 2011-12-22
          • 1970-01-01
          • 1970-01-01
          • 2016-03-01
          • 1970-01-01
          • 2011-09-25
          • 1970-01-01
          • 2020-07-15
          • 2012-07-06
          相关资源
          最近更新 更多