私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ【PHP】下らねぇ質問はID出して書き込みやがれ 133
php スレッド一覧へ / php とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
>>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" フラグをいけると思いますが、
結局はそのフラグにも排他ロックが必要なのは同じなので、だったら無駄なことはせず、
上記のようなコードでいいと思います。
詳しく言うと、>>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" フラグをいけると思いますが、
結局はそのフラグにも排他ロックが必要なのは同じなので、だったら無駄なことはせず、
上記のようなコードでいいと思います。
>>252
コードまでありがとうございます!
でも(SELECT文などの)待機中にDELETEされたら待機してる処理が実行不可能になってしまうのでは…
それとWHERE文で排他ロックされていない行を探すことは出来ないのでしょうか?
そのためにlockedフラグを作ろうとしているのですが…
お願いします
コードまでありがとうございます!
でも(SELECT文などの)待機中にDELETEされたら待機してる処理が実行不可能になってしまうのでは…
それとWHERE文で排他ロックされていない行を探すことは出来ないのでしょうか?
そのためにlockedフラグを作ろうとしているのですが…
お願いします
>>254
トランザクションの理解が不十分に思える。
共有ロックと排他ロックについて自分で調べるといいよ。
SELECT ... FOR UPDATE
SELECT ... LOCK IN SHARE MODE
http://dev.mysql.com/doc/refman/5.1-olh/ja/innodb-locking-reads.html
トランザクションの理解が不十分に思える。
共有ロックと排他ロックについて自分で調べるといいよ。
SELECT ... FOR UPDATE
SELECT ... LOCK IN SHARE MODE
http://dev.mysql.com/doc/refman/5.1-olh/ja/innodb-locking-reads.html
>>253
lockedフラグの考え方でいいよ。
排他ロックの話は、ロック解除時に使用済みのギフトカードを取得することになるんじゃないのという懸念のとおり。
update tname set locked = true where giftcode = (select giftcode from tname where locked = false order by random() limit 1);
の結果が、1件になるまで繰り返して、1件になったときのレコードを処理すればいいよ。
lockedフラグの考え方でいいよ。
排他ロックの話は、ロック解除時に使用済みのギフトカードを取得することになるんじゃないのという懸念のとおり。
update tname set locked = true where giftcode = (select giftcode from tname where locked = false order by random() limit 1);
の結果が、1件になるまで繰り返して、1件になったときのレコードを処理すればいいよ。
連投スマソ。
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かなにか
という流れでいいと思う。
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かなにか
という流れでいいと思う。
>>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の削除は出来ないと思う
テーブルに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の削除は出来ないと思う
ロックのことはよくわからんけど、ギフトコードが連番って不正取得される危険高くならない?
チェックデジットとかを付与してバルクアクセスを防止したほうが良さそうだけどどうだろう
チェックデジットとかを付与してバルクアクセスを防止したほうが良さそうだけどどうだろう
>>264
それ入出力じゃないよね
それ入出力じゃないよね
r+のようなイメージで、読むときは標準入力、書くときは標準出力へと振り分けてくれる
便利なストリームはないのか、ということだと思うけど、ないと思う
便利なストリームはないのか、ということだと思うけど、ないと思う
ってあれ、どうしたら作れますか、か。
streamWrapperを使えば作れそうに見えるけど、試してみた?
streamWrapperを使えば作れそうに見えるけど、試してみた?
受け取った側が undisclosed-recipients; になるから
何か設定した方がいいと思うけどね。
何か設定した方がいいと思うけどね。
>>251
これで書く量多いと思う理由は?
これで書く量多いと思う理由は?
>>246
PHP6.5って何年後の話ですか?
PHP6.5って何年後の話ですか?
>>213
がんばってネタ書いたけどスルーされてる気持ち教えて?
がんばってネタ書いたけどスルーされてる気持ち教えて?
>>251
長くなるけど
<?php
$ary = array();
$idx = a;
foreach(explode() as $item){
$ary[$idx] = $item;
$idx++;
}
//http://secretaccess.seesaa.net/s/article/257600560.html を参考にしました
?>
これでどう?
長くなるけど
<?php
$ary = array();
$idx = a;
foreach(explode() as $item){
$ary[$idx] = $item;
$idx++;
}
//http://secretaccess.seesaa.net/s/article/257600560.html を参考にしました
?>
これでどう?
>>213
ネタだと思ったらまじでtrueだった
ネタだと思ったらまじでtrueだった
だから>>214があるんじゃん
>>283
PHP5.2.8使ってるのに堅牢なライブラリがあるわけがない。
あとRSSの取得でAllowed memory size of ~ bytes exhausted エラーが起きるっておかしい。
どれだけ大きいRSSなんだよと。
データ取得部分より他のところでエラーが起きているかどうか見たほうが良いと思う。
常駐しているって書いてあるから、特にメモリ関係。
http://php.net/manual/ja/features.gc.performance-considerations.php
こんな感じで組んでるんだったら現環境で解決しようとするのは諦めた方がいい。
ループじゃなくてcronで実行するとかなら問題起きないかも。
PHP5.2.8使ってるのに堅牢なライブラリがあるわけがない。
あとRSSの取得でAllowed memory size of ~ bytes exhausted エラーが起きるっておかしい。
どれだけ大きいRSSなんだよと。
データ取得部分より他のところでエラーが起きているかどうか見たほうが良いと思う。
常駐しているって書いてあるから、特にメモリ関係。
http://php.net/manual/ja/features.gc.performance-considerations.php
こんな感じで組んでるんだったら現環境で解決しようとするのは諦めた方がいい。
ループじゃなくてcronで実行するとかなら問題起きないかも。
session_startのオン状態を判別して
オフならsession_startする方法ありますか
オフならsession_startする方法ありますか
>>273
タイプ量がちょっと多いから
タイプ量がちょっと多いから
pythonみたいにa,b=[1,2]みたいなことはできないから
それで妥協できないならphpにこだわる必要はないかなと
それで妥協できないならphpにこだわる必要はないかなと
>>290
array_combineあたりで妥協してくれ
array_combineあたりで妥協してくれ
初心者に限ってコード量が少ないのが良コードだと思い込んでるものなんだよな
理想系を挙げなければならない>>236の場面でああいうコードを書いてしまうのがダメなんじゃないかなぁ。
たとえば、$arr['a', 'b'] = explode(' ', 'a_val b_val'); みたいに書くことはできないのかって質問なら、
気持ちは分からんでもないと思うわけで。
たとえば、$arr['a', 'b'] = explode(' ', 'a_val b_val'); みたいに書くことはできないのかって質問なら、
気持ちは分からんでもないと思うわけで。
>>289
ありがとうございます
ありがとうございます
>>299
起きがけで寝ぼけてるかもしれんがODBCは?
起きがけで寝ぼけてるかもしれんがODBCは?
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / php スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- 【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
トップメニューへ / →のくす牧場書庫について