PHP MySQL:如何确定数据库中是否已存在值

时间:2013-09-26 19:50:43

标签: php mysql pdo parameterized-query

我有一个表单按钮,我需要根据用户输入和我的数据库中是否已存在该输入执行两项不同的操作。如果输入不存在,则该按钮将创建新记录。如果它存在,那么现有记录将被更新。

这是我现在的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 个答案:

答案 0 :(得分:0)

鉴于你拥有的,我会这样做:

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

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

答案 1 :(得分:0)

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

检查您获得的值是否大于1。如果是,请更新它:

UPDATE ptfp1 set ...其中ProposalNo =:input

否则

INSERT INTO ptfp1(...)VALUES(...)

答案 2 :(得分: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), ...

Documentation

答案 3 :(得分: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;
}

躲在明显的视线中!