Быстро проверить или добавить в БД

Я использую apache, php, mysql и code igniter, и у меня настроена база данных. В базе данных у меня есть два столбца, которые должны быть уникальными в комбинации: широта и долгота.

Поэтому я настроил базу данных, используя этот вызов:

alter table pano_raw add unique index(lat, lng)

Теперь, когда я вставляю значения в два столбца (широта и долгота), если значение одинаковое, база данных должна отклонить запись правильно?

function addNewSet($data)
{
    $this->db->insert('sets', $data);
}

Эта функция должна возвращать истину или ложь, в зависимости от успеха чтения или записи.

Итак, как мне изменить его, чтобы когда он возвращал row_id вставленной записи или возвращал FALSE? Если запись сработала, мне нужен row_id, если нет, мне нужен FALSE, чтобы я мог изменить код, вызывающий эту функцию.

Будет ли это работать? Я так не думаю. Идеи?

function addNewSet($data)
{
    $this->db->insert('sets', $data);
    return $this->db->insert_id();
}

person Phil Salesses    schedule 28.03.2011    source источник
comment
я заметил, что ваш sql ссылается на таблицу pano_raw, но ваш запрос CI ссылается на таблицу sets. Это ошибка? или это 2 разные таблицы?   -  person icchanobot    schedule 28.03.2011


Ответы (3)


По умолчанию он не возвращает false, перед возвратом false будет ошибка базы данных.

Если вы действительно этого хотите, вам нужно перейти к application/config/database.php и изменить значение этого параметра на false $db['default']['db_debug'] = FALSE;

Тогда вы сможете это сделать (при условии, что в вашей таблице для поля id задано автоматическое увеличение)

 function addNewSet($data) {
     if ($this->db->insert('sets', $data)) {
          return $this->db->insert_id(); 
     } else {
          return FALSE;
     }
 }
person icchanobot    schedule 28.03.2011

Попробуй это:

function addNewSet($data)
{
    $result = $this->db->insert('sets', $data);
    if ( $result )
        return $this->db->insert_id();
    return false;
}
person ariefbayu    schedule 28.03.2011

Вы можете использовать $this->db->affected_rows(); после вставки данных, чтобы проверить, была ли добавлена ​​(или затронута) какая-либо запись.

So

function addNewSet($data)
{
    $this->db->insert('sets', $data);

    if($this->db->affected_rows()==1)
    {
        return $this->db->insert_id();
    }
    else
    {
        return false; // nothing was added!
    }
}

Должен сделать это (не проверено).

person Ross    schedule 28.03.2011