繁体   English   中英

PHP的PostgreSQL检查插入之前是否已经记录

[英]php postgresql check if record already before inserting

我无法弄清楚查询语句的正确措辞/语法。 我想检查一下我们的表中是否已有一所与学校名称匹配的学校(为学校命名)。 如果是这样,则说明该状态已经存在。 任何输入都会很棒!

  //create a connection (the connection is made in another php file)
  $obj = new MyConnection();
  $obj->setConn();
  $obj->displayValues();
  $qObj = new MyCode();
  $qObj->setConn( $obj->getConn());

  //Query to put all the school data into db
  $q1 = "INSERT INTO schools(
                 SchoolName,
                 SchoolWebsite,
                 City,
                 State,
                 Locale,
                 Sector,
                 Tuition,
                 GradRate,
                 FacToStudRatio,
                 StudentPop,
                 FreshmenPop,
                 PercentWomen,
                 PercentMen,
                 PercentAdmitted,
                 AverageGpa,
                 AverageScore)

        VALUES ('$SchoolName',
                '$SchoolWebsite',
                '$City',
                '$State',
                '$Locale',
                '$Sector',
                '$Tuition',
                '$GradRate',
                '$FacToStudRatio',
                '$StudentPop',
                '$FreshmenPop',
                '$PercentWomen',
                '$PercentMen',
                '$PercentAdmitted',
                '$AverageGpa',
                '$AverageScore')";


  $findResult = pg_query( 'SELECT * FROM schools WHERE schoolname =.$SchoolName);

  if ($findResult != 0) 
  {
    echo "School Record Already Exists<br/>";
    die;
  }

  $qObj->setQuery($q1);
  $qObj->runQuery();

你已经'在你的代码失踪

$findResult = pg_query( 'SELECT * FROM schools WHERE schoolname ='.$SchoolName)
                                                                 ^

这与“ upsert”问题有关 -它是一个如果不存在的插入。 这样做比您预期的要难,而且很容易出现比赛条件。

最佳解决方案始终是unique约束或唯一索引。 尝试插入,如果遇到错误,则说明该行已存在。

另一种方法是在LOCK TABLE ... IN EXCLUSIVE MODE ,这样可以保证没有其他人可以在同一时间在表中插入相同的行。 不过,这种方式无法很好地扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM