元スレ【PHP】下らねぇ質問はID出して書き込みやがれ 133
php覧 / PC版 /みんなの評価 :
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は?
みんなの評価 :
類似してるかもしれないスレッド
- 【PHP】下らねぇ質問はID出して書き込みやがれ 123 (1001) - [98%] - 2012/11/20 5:30
- 【PHP】下らねぇ質問はID出して書き込みやがれ 139 (994) - [98%] - 2015/7/25 21:15
- 【PHP】下らねぇ質問はID出して書き込みやがれ 103 (1001) - [98%] - 2011/2/14 19:50
- 【PHP】下らねぇ質問はID出して書き込みやがれ 130 (1001) - [98%] - 2013/11/11 2:45
- 【PHP】下らねぇ質問はID出して書き込みやがれ 131 (1001) - [98%] - 2014/1/19 21:30
- 【PHP】下らねぇ質問はID出して書き込みやがれ 132 (1000) - [98%] - 2014/6/18 20:58
- 【PHP】下らねぇ質問はID出して書き込みやがれ 134 (1002) - [98%] - 2014/7/29 4:15
- 【PHP】下らねぇ質問はID出して書き込みやがれ 135 (984) - [98%] - 2014/8/7 1:00
- 【PHP】下らねぇ質問はID出して書き込みやがれ 136 (936) - [98%] - 2014/9/18 12:45
- 【PHP】下らねぇ質問はID出して書き込みやがれ 137 (995) - [98%] - 2023/1/30 18:45
- 【PHP】下らねぇ質問はID出して書き込みやがれ 138 (991) - [98%] - 2015/1/6 8:00
- 【PHP】下らねぇ質問はID出して書き込みやがれ 113 (1001) - [98%] - 2012/1/1 1:00
- 【PHP】下らねぇ質問はID出して書き込みやがれ 125 (1001) - [96%] - 2013/2/4 13:30
- 【PHP】下らねぇ質問はID出して書き込みやがれ 126 (1001) - [96%] - 2013/3/19 13:15
- 【PHP】下らねぇ質問はID出して書き込みやがれ 121 (1001) - [96%] - 2012/8/14 7:45
- 【PHP】下らねぇ質問はID出して書き込みやがれ 101 (1001) - [96%] - 2010/12/18 22:31
- 【PHP】下らねぇ質問はID出して書き込みやがれ 129 (1001) - [96%] - 2013/9/18 1:45
トップメニューへ / →のくす牧場書庫について