【问题标题】:Check or Add to DB quickly快速检查或添加到数据库
【发布时间】:2011-07-24 06:55:13
【问题描述】:

我正在使用 apache、php、mysql 和 code igniter,并且我已经设置了一个数据库。在数据库中,我有两列都需要在组合中是唯一的:纬度和经度。

所以我使用这个调用设置了数据库:

alter table pano_raw add unique index(lat, lng)

现在当我将值插入两列(lat 和 lng)时,如果值相同,数据库应该拒绝写入正确吗?

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

这个函数应该返回一个true还是false,取决于读成功还是写正确?

那么现在我该如何改变它,以便它何时返回插入记录的 row_id 或返回 FALSE?如果写入成功,我需要 row_id,如果没有,我需要 FALSE,以便我可以更改调用此函数的代码。

这行得通吗?我不这么认为。想法?

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

【问题讨论】:

  • 我注意到您的 sql 引用了表 pano_raw,但您的 CI 查询引用了表 sets。这是一个错误吗?还是它们是 2 张不同的桌子?

标签: php mysql codeigniter codeigniter-2


【解决方案1】:

默认不返回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;
     }
 }

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

      【解决方案3】:

      您可以在插入数据后使用$this->db->affected_rows();检查是否添加(或影响)任何记录。

      所以

      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!
          }
      }
      

      应该这样做(未经测试)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-28
        • 2012-02-16
        • 2014-02-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多