0

我有一个串行密钥表

+----+---------------------+------+
| id | product_key         | used |
+----+---------------------+------+
|  1 | 3C45-GH76-9V74-HLKJ |    1 |
|  2 | REDF-6KI9-00IU-4867 |    0 |
|  3 | 1111-1111-1111-1111 |    0 |
|  4 | 2222-2222-2222-2222 |    0 |
|  5 | 3333-3333-3333-3333 |    0 |
+----+---------------------+------+

我想获得一个used=0使用 zend 框架的行记录。然后更改为used=1是否product_key有选择。

我对使用 Zend 感到困惑。

我认为是这样的,但是如果选择了该产品密钥,如何将“1”分配给使用?

$productKey = $this->_helper->model('ProductKeys')->fetchOne('SELECT * from product_keys WHERE used=0 LIMIT 1');
4

1 回答 1

1

在一个简单的查询中似乎没有办法做到这一点。此外,fetchOne仅获取第一条记录的第一列。该助手将只返回 ID,而不是 product_key。

选项 1: 修改您的 ProductKeys 模型以获取密钥并将其设置为已使用:

class My_Model_ProductKeys extends Zend_Db_Table_Abstract
...
function getKeyAndMarkUsed()
{
  $select = $this->select();
  $select->where('used=?',1)->limit(1)->order('ID');
  $keyRow = $this->fetchRow();
  if ($keyRow){
    $this->update(array('used'=>1),'id='.$keyRow->ID);
    return $keyRow->id;
  }
  else{
    //no keys left! what to do??? Create a new key?
    throw new Exception('No keys left!');
  }
}

然后你会:

$productKey = $this->_helper->model('ProductKeys')->getKeyAndMarkUsed();

选项 2:创建一个数据库过程来执行上述功能并调用它。

于 2013-01-11T23:33:50.487 回答