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();

2 ответа

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

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

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

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

$findResult = pg_query( 'SELECT * FROM schools WHERE schoolname ='.$SchoolName)
                                                                 ^
Другие вопросы по тегам