0

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

这是我现在的 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;
}

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

4

4 回答 4

0

鉴于你有什么,我会做:

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

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

于 2013-09-26T19:55:05.693 回答
0

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

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

UPDATE ptfp1 set ... where ProposalNo = :input

别的

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

于 2013-09-26T19:55:13.837 回答
0

想出了一个答案。只需在我的 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;
}

隐藏在众目睽睽下!

于 2013-09-26T20:29:32.357 回答
0

假设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), ...

文档

于 2013-09-26T20:07:41.017 回答