[英]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.