のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:126,368,894人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレ【PHP】下らねぇ質問はID出して書き込みやがれ 133

    php覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    251 = :

    >>240
    そう
    でもそれだと書く量多いので工夫したい

    252 = :

    >>245
    詳しく言うと、>>244 の処理は、データベースから値を取りだして消すまで
    ほかのアクセスを待たせます。そのため順序付けやランダムに関係なく、同時アクセスで
    偶然同じ値を取得してしまうことは起こりえないわけです。

    mysqli で書くとこんな感じ(手続き型で書いている場合は適宜書き換えてね)
    $mysqli->begin_transaction();
    $mysqli->query('SELECT giftcode FROM table_name WHERE ~~ FOR UPDATE;');
    $mysqli->query('DELETE FROM table_name WHERE diftcode=○○');
    $mysqli->commit();

    >>247 のような "locked" フラグをいけると思いますが、
    結局はそのフラグにも排他ロックが必要なのは同じなので、だったら無駄なことはせず、
    上記のようなコードでいいと思います。

    253 = :

    >>252
    コードまでありがとうございます!
    でも(SELECT文などの)待機中にDELETEされたら待機してる処理が実行不可能になってしまうのでは…
    それとWHERE文で排他ロックされていない行を探すことは出来ないのでしょうか?
    そのためにlockedフラグを作ろうとしているのですが…
    お願いします

    256 = :

    >>253
    lockedフラグの考え方でいいよ。
    排他ロックの話は、ロック解除時に使用済みのギフトカードを取得することになるんじゃないのという懸念のとおり。

    update tname set locked = true where giftcode = (select giftcode from tname where locked = false order by random() limit 1);
    の結果が、1件になるまで繰り返して、1件になったときのレコードを処理すればいいよ。

    257 = :

    繰り返す必要もないか。まぁ、そういうこと。

    258 = :

    連投スマソ。
    mysqlならこうかけるようだ
    update tname set locked = true where locked = false order by random() limit 1;

    便利ね。ただ、postgresqlのreturning相当のものがないと、結果を取得しないといけないので、

    update tname set owner = ユーザIDかなにか where owner is null order by random() limit 1;
    select giftcode from tname where owner = ユーザIDかなにか
    giftcodeを使った処理
    delete from tname where owner = ユーザIDかなにか

    という流れでいいと思う。

    259 = :

    >>253
    テーブルにgiftcodeを取得したユーザーIDを格納するカラムに追加(仮にgetid)、初期値は0としておく
    最初の取得で
    begin transaction;
    select ~ for update where getid=0;
    recordがあったら
    update ~ set getid=userid where (取得したgiftcode)
    commit

    recordがないときは、giftcodeは全部使い切ってる

    後続の取得処理は、先行する処理がcommitするまで待たされる。
    先行の処理のcommit後は、getidが0でないので、このgiftcodeは除外される
    こんな感じかな

    だれが取得したか記録しておく必要があるなら、giftcodeの削除は出来ないと思う

    260 = :

    ロックのことはよくわからんけど、ギフトコードが連番って不正取得される危険高くならない?
    チェックデジットとかを付与してバルクアクセスを防止したほうが良さそうだけどどうだろう

    261 = :

    ここに書く都合でじゃない?

    264 = :

    >>263
    http://www.php.net/manual/ja/features.commandline.io-streams.php

    265 = :

    >>264
    それ入出力じゃないよね

    266 = :

    >>265
    264じゃないけど
    標準入出力 というものがあると思って言っている?
    それともそういう便利に抽象化する何かを期待している?

    267 = :

    r+のようなイメージで、読むときは標準入力、書くときは標準出力へと振り分けてくれる
    便利なストリームはないのか、ということだと思うけど、ないと思う

    268 = :

    ってあれ、どうしたら作れますか、か。
    streamWrapperを使えば作れそうに見えるけど、試してみた?

    269 = :

    >>268
    なるほど
    これでちょっとやってみます

    272 = :

    受け取った側が undisclosed-recipients; になるから
    何か設定した方がいいと思うけどね。

    273 = :

    >>251
    これで書く量多いと思う理由は?

    275 = :

    >>246
    とりあえず本当に検索したのか疑問なんだけど
    「php micro framework」とか「php フレームワーク 軽量」で検索して好きなものを見つけろ

    276 = :

    >>231
    そういう記事を書くと次の日にはてぶコメントで炎上しますよ
    記事に書いて反響コメントを見てみればいい

    277 = :

    >>213
    がんばってネタ書いたけどスルーされてる気持ち教えて?

    278 = :

    >>251
    長くなるけど

    <?php
    $ary = array();
    $idx = a;
    foreach(explode() as $item){
     $ary[$idx] = $item;
     $idx++;
    }
    //http://secretaccess.seesaa.net/s/article/257600560.html を参考にしました
    ?>
    これでどう?

    279 = :

    >>272
    初めて知りました
    ありがとうございます

    280 = :

    >>213
    ネタだと思ったらまじでtrueだった

    281 = :

    だから>>214があるんじゃん

    284 = :

    無限ループになる方がおかしい

    289 = :

    session_status()

    290 = :

    >>273
    タイプ量がちょっと多いから

    291 = :

    PHP使ってる時点でこだわるところが違うよ

    293 = :

    >>290
    array_combineあたりで妥協してくれ

    294 = :

    初心者に限ってコード量が少ないのが良コードだと思い込んでるものなんだよな

    295 = :

    理想系を挙げなければならない>>236の場面でああいうコードを書いてしまうのがダメなんじゃないかなぁ。

    たとえば、$arr['a', 'b'] = explode(' ', 'a_val b_val'); みたいに書くことはできないのかって質問なら、
    気持ちは分からんでもないと思うわけで。

    296 = :

    >>295
    そういう書き方を例としてあげられるのは、前提として>>236の質問があったからこそだと思うよ。
    PHPの構文でエラーが出るような書き方で質問するのは難しいだろうね。
    「pythonではこういう書き方できるけどPHPではこういう書き方できないのか」みたいな一文があれば良いかもしれない。
    ただそれもpythonとか他の言語を知っていれば入れられる文章だけど。

    297 = :

    なぜまともなレスが1つもつかないのか

    298 :

    >>289
    ありがとうございます

    300 = :

    >>299
    起きがけで寝ぼけてるかもしれんがODBCは?


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / php一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について