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=0zendフレームワークを使用した1行のレコードを取得したいと思います。次に、それが選択さ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は最初のレコードの最初の列のみを取得します。そのヘルパーは、product_key ではなく、ID のみを返します。

オプション 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 に答える