【问题标题】:PHP PDO INSERT stop duplicate entryPHP PDO INSERT 停止重复条目
【发布时间】:2022-01-26 07:22:27
【问题描述】:

我需要一些帮助才能使此代码正常工作,以防止重复输入 cname、ccode、crgeno 和 cvatno 的数据库。请帮忙。

//My DB Code
public function insert($cname, $ccode, $cregno, $cvatno)
    {
        $sql = "INSERT INTO tbl_client (ccode, cname, cregno, cvatno) VALUES (:amcname,:amccode,:amcregno,:amcvatno)";
        $stmt = $this->conn->prepare($sql);
        $stmt->execute(['amcname' => $cname, 'amccode' => $ccode, 'amcregno' => $cregno, 'amcvatno' => $cvatno]);
        return true;
    }

//My action Code
if(isset($_POST['action']) && $_POST['action'] == "insert"){
        $cname = $_POST['amcname'];
        $ccode = $_POST['amccode'];
        $cregno = $_POST['amcregno'];
        $cvatno = $_POST['amcvatno'];
        
        $db->insert($cname, $ccode, $cregno, $cvatno);
         
    }

@西蒙妮: 也这样做了:

public function insert($cname, $ccode, $cregno, $cvatno)
    {

        $query = $this->conn->prepare("SELECT cname FROM tbl_client WHERE cname = ?");
        $query->bind_param('s',$cname);
        $query->execute();
        $result = $query->get_result();
        $count = $result->num_rows;

        if($count===0){
            $sql = "INSERT INTO tbl_client (ccode, cname, cregno, cvatno) VALUES (:amcname,:amccode,:amcregno,:amcvatno)";
            $stmt = $this->conn->prepare($sql);
            $stmt->execute(['amcname' => $cname, 'amccode' => $ccode, 'amcregno' => $cregno, 'amcvatno' => $cvatno]);
            return true;
        };   
    }

:(还是有问题...

【问题讨论】:

  • 选项是两个,如果数据库中的字段是唯一的,您可以使用INSERT IGNORE 直接查询,或者您可以在插入之前使用简单的if($result->num_rows === 0) {do you query insert} 查询SELECT
  • @Simone Rossaini 谢谢你会试试的
  • “仍有问题”是什么意思?您添加的代码用于 mysqli,并且您在问题中使用 PDO,因此您需要更改新代码以使用 PDO,因为您不能在 PDO 连接上使用 mysqli 函数。
  • @droopsnoot: 拍摄记录,将尝试

标签: php pdo insert


【解决方案1】:

改用此代码:

public function insert($cname, $ccode, $cregno, $cvatno) {

  $query = $this->conn->prepare("SELECT COUNT(cname) as countname FROM tbl_client WHERE cname = ?");
  $query->bind_param('s',$cname);
  $query->execute();
  $result = $query->get_result();
  $count = $result->fetch_assoc()['countname']; //count will > 0 if exist in db.
  if ($count === 0) {
    //query insert
  }

}

请记住始终准备查询。

【讨论】:

  • 这不做任何事情也不允许插入。
  • 我写的部分允许您从选择查询中获得行号,如果数字为 0,则数据库中不存在执行插入查询。 (我没有在我的示例中写,因为您不必复制和粘贴,但您必须思考,只需将 //query insert 替换为查询)
  • 请注意,OP 使用的是 PDO 而不是 mysqli,因为此答案使用。
猜你喜欢
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 2012-08-22
  • 1970-01-01
相关资源
最近更新 更多