我无法弄清楚查询语句的正确措辞/语法。我想检查我们的表(名称学校)中是否已有一所与学校名称相符的学校。如果是这样,它已经存在的状态。任何输入都会很棒!
//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();
答案 0 :(得分:0)
您的代码中缺少'
$findResult = pg_query( 'SELECT * FROM schools WHERE schoolname ='.$SchoolName)
^
答案 1 :(得分:0)
这与"upsert" problem有关 - 它是一个插入 - 如果不存在。这样做比你预期的更难并且非常容易出现竞争条件。
最佳解决方案始终是unique
约束或唯一索引。尝试插入,如果出现错误,则表示该行已存在。
替代方法是LOCK TABLE ... IN EXCLUSIVE MODE
表,因此您保证没有其他人可以同时在其中插入相同的行。但这并不能很好地扩展。