php postgresql проверяет, если запись уже перед вставкой

Я не могу понять правильную формулировку / синтаксис для оператора запроса. Я хочу проверить, есть ли уже школа в нашей таблице (называет школы), которая соответствует названию школы. Если это так, то государство уже существует. Любой вклад был бы великолепен!

  //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

Решение

У тебя есть ' отсутствует в вашем коде

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

Другие решения

Это связано с проблема «upsert» — это вставка, если не существует. Делать это сложнее, чем вы ожидаете, и очень склонны к гоночным условиям.

Лучшее решение всегда unique ограничение или уникальный индекс. Попробуйте вставить, и если вы получите ошибку, вы знаете, что строка уже существует.

Альтернативой является LOCK TABLE ... IN EXCLUSIVE MODE таблицу, так что вы гарантируете, что никто не сможет одновременно вставить в нее одинаковую строку. Это не хорошо масштабируется, хотя.

0

По вопросам рекламы [email protected]