[ОБНОВЛЕНИЕ Янв 2013]
Этот ответ относится к более старой версии Drupal, чем текущая стабильная версия. Отредактируйте этот ответ, добавив в него раздел обновления с более актуальной информацией, поскольку я больше не работаю с Drupal и не слежу за изменениями в его API.
-semperos
[/ ОБНОВЛЕНИЕ январь 2013]
У вас есть несколько вариантов, а именно drupal_write_record
или выполнение примера запроса и проверка результатов. Это не должно быть сделано в одном запросе SQL, как в вашем вопросе.
drupal_write_record (предпочтительный метод)
Функция drupal_write_record
позволяет вам указать таблицу, с которой вы хотите иметь дело, и объект (или связанный массив), который содержит данные для каждого столбца / поля этой таблицы. Если у вас уже есть первичный ключ для строки, которую вы пытаетесь обновить, вы включаете его в качестве третьего параметра функции, и drupal_write_record
автоматически использует команду SQL UPDATE
. В противном случае значение по умолчанию INSERT
. Например:
drupal_write_record('uc_posten_packages', array('title' => "Foobar",
'label' => "foobar",
'cost' => 10,
'length' => 100,));
Это будет INSERT
новая запись с этой информацией. Если бы вы включили третий аргумент array($pid)
, где $pid
- это имя поля, которое выступает в качестве первичного ключа для таблицы, вместо этого было бы выполнено обновление.
Эта функция будет работать только в том случае, если таблица, с которой вы имеете дело, была определена с использованием hook_schema
, что должно быть справедливо для любого правильно разработанного модуля Drupal, имеющего таблицы базы данных. Поскольку эта функция использует схему для обеспечения правильной записи в базу данных, следует использовать эту функцию, когда это возможно (или когда не существует других более специфических функций, например, node_save
для узловых объектов).
Тестовый запрос
Вы можете просто запустить пример запроса, используя db_result(db_query("SELECT..."))
. Если результат не найден, он возвращает пустую строку, которая в PHP оценивается как false, поэтому ваш код может выглядеть следующим образом:
if (db_result(db_query("SELECT * FROM {uc_posten_packages} WHERE pid = %d", $pid))) {
// UPDATE
} else {
// INSERT
}