在创建新记录之前如何检查记录是不是已经存在?

Posted

技术标签:

【中文标题】在创建新记录之前如何检查记录是不是已经存在?【英文标题】:How to check if record is already exists before creating a new record?在创建新记录之前如何检查记录是否已经存在? 【发布时间】:2015-01-06 15:15:41 【问题描述】:

我正在尝试对论坛脚本实施重复主题阻止系统。由于我对 php 非常不了解,所以也许你想帮助我。不幸的是,我什至不确定我是否正在尝试编辑脚本的正确部分,但代码如下:

// If it's a new topic
if ($fid)

    $subject = pun_trim($_POST['req_subject']);

    if ($pun_config['o_censoring'] == '1')
        $censored_subject = pun_trim(censor_words($subject));

    if ($subject == '')
        $errors[] = $lang_post['No subject'];
    else if ($pun_config['o_censoring'] == '1' && $censored_subject == '')
        $errors[] = $lang_post['No subject after censoring'];
    else if (pun_strlen($subject) > 70)
        $errors[] = $lang_post['Too long subject'];
    else if ($pun_config['p_subject_all_caps'] == '0' && is_all_uppercase($subject) && !$pun_user['is_admmod'])
        $errors[] = $lang_post['All caps subject'];

所以我试图实现如果 $subject 存在于数据库中(SELECT * FROM topics WHERE subject),以这种格式显示错误:$errors[] = $lang_post ['主题已存在'];

谢谢。

【问题讨论】:

既然您已将此标记为mysql,为什么不使用COUNT()mysqli_num_rows() 或PDO 的rowCount() "SELECT * FROM topics WHERE subject" - 你需要添加一些东西,比如WHERE subject='something' 【参考方案1】:

有几种方法可以获取是否在数据库中的信息(这里我使用的是 PDO) 这是通用代码:

$conn = new PDO('mysql:dbname=db_name', 'username', 'password')
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

fetch->(PDO::FETCH_NUM)

$sql = $conn->prepare("query_to_db");
$sql->execute();
$rows = $sql->fetch(PDO::FETCH_NUM);
if( $row > 0 )
   echo "the credentials exists";

else
   // there is nothing like this in the database

mysql错误代码23000

try
   // connection code above mentioned
   $sql = $conn->prepare("query_to_db");
   $sql->execute();

catch(PDOException $e)
  if($e->getCode() == 23000)
     // the credentials exists
  
  else
      // doesn't exists
  

rowCount()

$sql = $conn->prepare("query_to_db");
$sql->execute();

$count = $sql->rowCount();
if($rowCount > 0)
   //exists in the db

else
   //it doesn't exists in the db

但是 mysql 中没有 rowCount php 文档说:

对于大多数数据库,PDOStatement::rowCount() 不会返回受 SELECT 语句影响的行数。相反,使用 PDO::query() 发出 SELECT COUNT(*) 语句,其谓词与预期的 SELECT 语句相同,然后使用 DOStatement::fetchColumn() 检索将返回的行数。然后,您的应用程序可以执行正确的操作。

我个人更喜欢fetch->(PDO::FETCH_NUM),因为它比另一个更精确。

【讨论】:

以上是关于在创建新记录之前如何检查记录是不是已经存在?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 iOS10核心数据根据id检查记录是不是已经存在

在创建之前如何检查我的数据是不是已经存在于我的数据库中?

如何确定VB.net中是不是已经存在记录?

如何检查记录是不是已经存在,然后在 laravel 中更新或插入?

如何在将大量数据插入数据库之前检查记录是不是存在?

实体框架:在插入新记录之前检查记录是不是存在