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

时间:2015-01-06 15:15:42

标签: php mysql stored-procedures insert exists

我正在尝试将一个重复的主题阻止系统实现到论坛脚本。由于我对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'];
}

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

谢谢。

1 个答案:

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

但是rowCount并不在mysql中 php doc说:

  

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

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