トップページ⇒php
1001コメント285KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2014/04/19(土) 08:04:54.26ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 132
http://nozomi.2ch.net/test/read.cgi/php/1390166591/

◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.5
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0175nobodyさん2014/05/01(木) 18:40:33.56ID:???
効率重視ならそもそもPHPなんか使わなくね

効率重視ならRubyだろjk
0176nobodyさん2014/05/01(木) 18:41:34.14ID:???
華麗にスルー
0177nobodyさん2014/05/01(木) 18:56:25.99ID:???
>>174
プログラミングで、前置きなしに「効率」と言ったら
明確な定義があるよ。
0178nobodyさん2014/05/01(木) 19:30:38.35ID:???
また>>55が暴れてんのか?
きっしょ
0179nobodyさん2014/05/01(木) 19:50:13.76ID:???
>>177
どんな定義?
とりあえず書く効率とか言う人ははじめて見たわ
0180nobodyさん2014/05/01(木) 20:11:33.41ID:???
>>179
JIS X 0129の効率性のところ
0181nobodyさん2014/05/01(木) 22:01:27.22ID:IVC8nsmp
半角括弧の「[」、これだけを置換しようとすると
長音の「ー」、これまで変に置換されます。

文字コードはSJIS。文字コードをUTF-8にすれば大丈夫だと思うのですが、
SJISのまま対応することできますか?
0182nobodyさん2014/05/01(木) 22:04:06.59ID:IVC8nsmp
追記、使用したコードです
$value = str_replace('[', "", $value);
0183nobodyさん2014/05/01(木) 22:55:44.35ID:???
mb_str_replace試した?
0184nobodyさん2014/05/02(金) 00:08:13.50ID:ur7avpqc
>>183
試していないのですが、

mb_strstr($value, "[")

で長音「ー」にヒットするので
mb対応でもだめみたいです
0185nobodyさん2014/05/02(金) 00:13:36.91ID:???
ーを「cho-on」に置換してまた戻せばいいんじゃね
0186nobodyさん2014/05/02(金) 00:17:04.58ID:???
SJISじゃなくてUTF-8にすればいいじゃん
そもそもファイルをSJISにしとくのがおかしい
UTF-8保存してSJISで出力するようにしろ
0187nobodyさん2014/05/02(金) 00:28:34.64ID:ur7avpqc
>>185
>>186
レスありがとうございます。
とりあえず置換で対応して
UTF-8保存してSJIS出力にしてみます
0188nobodyさん2014/05/02(金) 01:54:16.00ID:???
>>187
mb_internal_encodingでSJIS(SJIS-winのほうが好ましい)指定してる?
指定してなくてmb関数系を使用する場合は、引数にencodingを指定しないと正しい結果は得られない。

そもそもこういう現象が起きてる理由分かってるかな?
[の文字コードがーに使われているからなんだけど。

だから>>185の回答は、[とー以外にもそういった現象が起きる可能性があるから意味が無い。
というかこの件に限らず、こういう時は他の文字列に変換するとか普通はやったらダメ。
絶対に使用されない文字列に変換するとかなら考えないことはないけど、「cho-on」って絶対に入力されない文字なの?

また>>186も意味が無い。
理由としては上に書いたのと同じで、[とー以外の文字でこういった事が起きる場合があるから。
というか個人的に言わせてもらうと、UTF-8が好ましいって言うだけならまだしも、SJISにしとくのがおかしいっていうのは単なる偏見。
内容によってはSJISでも良いよ。
0189nobodyさん2014/05/02(金) 03:06:34.56ID:???
知ったか乙
偏見もクソあるか
デメリットだらけのSJISを使う必要はない
0190nobodyさん2014/05/02(金) 03:24:42.72ID:ur7avpqc
>>188
mb_internal_encodingはよく理解していませんでした
mb_strstrにencoding設定もしていなかったので正しく処理できていなかったと思います

参考になりました。ありがとうございます
0191nobodyさん2014/05/02(金) 03:36:24.09ID:???
>>188
mb_internal_encodingを設定することで
mb_strstr、mb_ereg_replaceで希望する処理になりました
ありがとうございます

>>189
5C問題で何度かエラーが出たことがあるので
UTF-8保存してSJISで出力に対応しようと思います
ありがとうございます
0192nobodyさん2014/05/02(金) 04:29:58.32ID:qs7JG5q/
ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。
ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。
ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。
ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。
ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。
ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。
0193nobodyさん2014/05/02(金) 11:19:50.80ID:???
SJISを使ってはいけないのは5C問題だけじゃないんだけどな
0194nobodyさん2014/05/02(金) 14:00:12.59ID:???
>>188
>理由としては上に書いたのと同じで、[とー以外の文字でこういった事が起きる場合があるから。

具体的にどの文字を指しているのかkwsk
0195nobodyさん2014/05/02(金) 14:15:00.69ID:???
2バイト目がprintableなコード全てだろw
つか、質問ならid出してくれ
0196nobodyさん2014/05/02(金) 15:10:06.98ID:???
それはsjisの話でしょ
utf-8のについてなんだけど
0197nobodyさん2014/05/02(金) 15:16:36.39ID:???
188はSJISの話だね
0198nobodyさん2014/05/02(金) 16:53:49.64ID:???
utf-8にすれば解決するってことだな
0199nobodyさん2014/05/02(金) 17:15:15.98ID:???
なんでutf-8にしても意味がないって>>188は言ってるの?
02001882014/05/02(金) 20:08:58.05ID:???
調べたらUTF-8は問題なかった。
>>186は本当にすまんかった。
以前UTF-16扱ってる時にでバグが出てたから勘違いしてた。
0201nobodyさん2014/05/02(金) 20:27:24.10ID:???
ファイル名がS-JISなのはどうにかならんのか
windows使うのがいかんのだろあが
で、UTF-8は何も問題なし?
0202nobodyさん2014/05/02(金) 20:31:09.78ID:???
>>189
なんでSJISだけそんなに食い付くの?
このスレで出てる回答の9割は嘘やいい加減な内容なのに。

基本的に質問者を騙して楽しむって暗黙の了解があるんだから水をさすなよ。
0203nobodyさん2014/05/02(金) 20:36:57.02ID:???
何こいつきっしょー
0204nobodyさん2014/05/02(金) 22:32:39.44ID:???
>>202
多分>>186は普段いないGW厨だろwたまたま来て覗いたけどそういう了解を知らないから間違った内容が目に入って思わず突っ込んだんだろw
0205nobodyさん2014/05/03(土) 13:22:28.77ID:dwgODfUZ
<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");
$stmt->execute(array($_GET['name']));

// プレースホルダは、値全体に対して使用しなければなりません
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->execute(array("%$_GET[name]%"));
?>


↑これプリペアドステートメントの間違った使い方なんですが、
どっちが間違ってるんですか?
0206nobodyさん2014/05/03(土) 13:34:58.30ID:dwgODfUZ
すいません↑は解決しました。
追加で質問なんですが、

PDOのexecuteで配列で値を渡すのと、
bindParamで値を渡すのは何が違うんでしょうか?


あと静的プレースホルダと動的プレースホルダの違いを教えて下さい。
0207nobodyさん2014/05/03(土) 13:41:51.51ID:???
>>206
lmgtfy . com/?q=php+%E9%9D%99%E7%9A%84+%E5%8B%95%E7%9A%84+%E3%83%97%E3%83%AC%E3%83%BC%E3%82%B9%E3%83%9B%E3%83%AB%E3%83%80+%E9%81%95%E3%81%84
0208nobodyさん2014/05/03(土) 16:05:22.50ID:???
>>206
http://jp1.php.net/manual/ja/pdostatement.execute.php
http://jp1.php.net/manual/ja/pdostatement.bindvalue.php
http://jp1.php.net/manual/ja/pdostatement.bindparam.php
ついでにbindParamとbindValueの違い。
http://webmaster.chielog.com/php/133.html

http://www.atmarkit.co.jp/fsecurity/column/ueno/60.html
0209nobodyさん2014/05/03(土) 16:56:02.72ID:dwgODfUZ
なるほど
たぶんなんとなくわかりました
ありがとうございました
0210nobodyさん2014/05/03(土) 17:07:55.71ID:???
executeで渡すと全部PDO::PARAM_STRになるんじゃなかったっけ
そんな記憶がある
0211nobodyさん2014/05/03(土) 19:22:09.61ID:???
明示しなければ、デフォルトの PARAM_STR になるだけの話
0212nobodyさん2014/05/03(土) 20:30:18.66ID:SAeP1+WO
>167あたり
echo $data['hoge'];
でここまで白熱してくれるとは思わんかったぉ。
今は会員データをすべて一度変数にいれてるんだけど、
連想配列にすれば、一行で終わって簡単だから、
そっちにしようか迷ったわけですが、
後者今のままのほうがよさそうなので、今のままでいきやす。
どもでしたのでした。
0213nobodyさん2014/05/03(土) 22:04:17.12ID:???
「一致します」と表示されてしまう理由わかりますか?

<?php
$a = "10円";
$b = 10;

if ($a == $b) {
echo "一致します";
}else{
echo "一致しません";
}
?>
0214nobodyさん2014/05/03(土) 22:11:57.25ID:???
<?php
$a = "10円";
$b = 10;

if ($a === $b) {
echo "一致します";
}else{
echo "一致しません";
}
?>
0215nobodyさん2014/05/03(土) 22:43:41.22ID:qufEmRhb
>>151、>>153
ありがとうございます
>>151のものはユーザーが入力した値を使えないし、
>>152だと1以上の値は使えない、だと痛いです…
とりあえず今すぐ作らなければいけないプログラムではないので、
時間があれば>>152のものを改造するなりどうしても分からなければ再度質問することにします。

それと、また聞きたい事がが出来てしまったのでまとまれば質問します、いつもすみません…
0216nobodyさん2014/05/03(土) 22:54:12.96ID:qufEmRhb
すみません、>>215訂正
>> 152ではなく>>153です…
0217nobodyさん2014/05/04(日) 12:51:19.54ID:SSVjx9p2
>215
乱数は基本のmd5とかshなんとかとかを適当にやって、
後はネットで検索するとランダムで英数字を作れる
サンプルが山ほどあるので、多くは桁数を指定できるので、
んで、基本の乱数にプラスでつければけっこう使える。
少数以下はなんに使うかわからないけど、
過激な重複がなければ、マイクロ秒をちびちびと
応用すれば、だいたい現場で使えるかと。
0218nobodyさん2014/05/04(日) 16:22:19.43ID:???
>>217
md5とかはハッシュ値を作るものであって乱数を決めるものじゃない。
ハッシュ値を出力するにしろ0-9a-fの範囲しか文字が存在しないから質問の回答としては不適切じゃね?
0219nobodyさん2014/05/04(日) 17:25:16.70ID:i3JfacAa
添付ファイルの維持について質問したいです。
下の流れで処理するフォームを作りました。

1.送信フォーム
↓
2.確認画面
↓
3.送信完了

確認画面のエラー処理などで送信フォームに戻る処理をすると
参照したファイルがリセットされ「ファイルが選択されていません。」の状態に戻るのですが、
添付したファイルを維持するにはどうすればいいのでしょうか?
0220nobodyさん2014/05/04(日) 18:15:16.16ID:???
>>219
ようゴミ
スレタイすら読めないゴミには無理
0221nobodyさん2014/05/04(日) 18:21:29.98ID:???
>>219
添付ファイルのみを別フォームで送信する
0222nobodyさん2014/05/04(日) 18:44:10.10ID:i3JfacAa
>>221
ありがとうございます
0223nobodyさん2014/05/04(日) 20:37:31.77ID:???
>>217
現場で使わないでください。というか、現場に来ないでください。
というレベルなんですけど。
0224nobodyさん2014/05/04(日) 20:48:58.88ID:???
まあ工事現場の話なんだけどな
0225nobodyさん2014/05/04(日) 21:18:35.04ID:???
>>223
文句だけは一人前だな
0226nobodyさん2014/05/04(日) 21:32:48.44ID:SSVjx9p2
>223
たしかに、会員サイトは長くやってるけど、
全部辞書とか見たりした独学でやってるんで、
プロっていうか企業のレベルは
わかりません。資格もないので。
現場っていうのは、まあ。そういうレベルではないけど
あるいみ実践なレベルです。
見方かえればごみかもしれません。はい。
0227nobodyさん2014/05/04(日) 22:20:52.80ID:???
俺も同じだがmd5で乱数っていう発想は無かった
0228nobodyさん2014/05/04(日) 22:39:55.11ID:???
>227
乱数は基本のmd5とかを適用にやって現場で使えるかと。
ネットで検索するとサンプルが山ほどあるのでけっこう使える。
0229nobodyさん2014/05/04(日) 22:45:25.19ID:???
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
0230nobodyさん2014/05/05(月) 04:28:54.11ID:???
>>225
ネットで検索すると(略)サンプルが山ほどある

↑PHPでこれをやるとどうなるか分かってるならいいんだけど。
PHPをけなすいつもの人と勘違いしないで欲しいんだけど、ネットのサンプルのひどさは有名だろ
0231nobodyさん2014/05/05(月) 12:06:39.29ID:???
>>229
md5が乱数には適さないという
論理的な反論があるならどうぞ。
0232nobodyさん2014/05/05(月) 12:39:07.88ID:???
>>231
MD5は衝突を無視すると、与えた入力と一意に対応するので、
解析用の辞書が出回っており、入力が文字列や数列になっていると、
わりと簡単にクラックされるので、用途に注意。
とかかな。
0233nobodyさん2014/05/05(月) 13:09:01.46ID:???
>>231
229じゃないけどハッシュ関数と乱数生成器の違いが判らないので教えて欲しいの?
0234nobodyさん2014/05/05(月) 13:17:15.51ID:???
>>232
ありがとう。

>>233
黙って。
0235nobodyさん2014/05/05(月) 13:34:45.54ID:???
>>234
いや…。
>>232 がありがとうなら、
>>233 に教えてもらえ。マジで。
0236nobodyさん2014/05/05(月) 15:47:10.22ID:CeNcO2Ei
list($a,$b)=
みたいな感じで連想配列に突っ込みたいんだけどできる?
02372292014/05/05(月) 17:32:37.81ID:???
>>231
非常にネタ臭いというかネタであってほしいけどマジレスするよ。

////間違いその1
md5はハッシュ関数。
ハッシュ関数の詳細は下記のURL参照。
http://www.atmarkit.co.jp/aig/02security/hashfunction.html

一方乱数はランダムな数値。
だから「md5などハッシュ関数で乱数を作る」というのは間違い。
「乱数を用いてmd5などのハッシュ関数でランダムな文字列を作る」なら話は分かる。

////間違いその2
話の元ネタである質問は
「暗号論的に良い疑似乱数や真の乱数はないのか?」
といった質問をしている。
「ランダムな文字列」のことは一切聞いていない。
0238nobodyさん2014/05/05(月) 18:24:10.11ID:???
>>237
下らないAA貼らずに最初からそう答えればよかったのに
ガキかよ
02392372014/05/05(月) 19:51:12.62ID:???
>>238
初めに>>218を書いてるんだよおっさん。残念なことにな。
0240nobodyさん2014/05/05(月) 19:55:45.79ID:???
>>236
list($arr['a'], $arr['b']) = explode()
こういうこと?
0241nobodyさん2014/05/05(月) 20:15:40.42ID:eyH3xZ+U
俺は乱数「意味不明で一意の数字」ときいたら、
それで対処しちゃうけどね。
何年もおkだし、ユーザーに迷惑かけたこともない。
大手のセキュリティーなんて、どこも似たレベルで
小学生が考えるくらいの工夫もない。
だから毎日ニュースに大手の不正アクセスが乗る。
どれがプロレベルかは難しい。
ま、運用が目的で、中身はどうでもいっかくらいだからから、
間違いの手法でも気にならないんだろう。
0242nobodyさん2014/05/05(月) 21:50:42.34ID:???
飲酒運転しているやつの言い訳にありそうなやつだなって思った(小並感)
0243nobodyさん2014/05/06(火) 10:03:03.23ID:Nk4oF//+
PHPとMySQLの質問です
mysqliを使って
___________________
|giftcode  .|←※カラム名「giftcode」
|0000-0000|←※ここから下は値
|0000-0001|
|1516-9247|
   ・
   ・
   ・

のようなテーブルから1つ(上からでもランダムでも良いです)値を取りだしてからその行を消したいのですが、その場合
アクセスが集中した際に、SELECT文を実行して値を取得するときからDELETE文を実行するときまでの時間に
他のアクセスが来て、同じ値を取得してしまうことは無いのでしょうか?
入っている値はgiftcodeのように1人にしか教えてはいけないものなので、
上記のようなことが起こりうるなら解決策を教えてほしいのです…よろしくお願いします
0244nobodyさん2014/05/06(火) 10:46:55.38ID:???
>>243
そういうロック処理をしてもらうのがデータベース。
トランザクションと排他ロックを使うことで同じ値をつかむのを防止できる。

必要なSQL文一式を START TRANSACTION と COMMIT 文で挟んでひとまとまりにし
FOR UPDATE でロックをかける。こうすることで、SELECT で取得したレコードは
COMMIT (またはROLLBACK)するまで、ほかのクライアントから一切読めなくなる。

START TRANSACTION;
SELECT 〜〜〜〜 FOR UPDATE;
DELETE 〜〜〜;
COMMIT;
0245nobodyさん2014/05/06(火) 11:21:59.78ID:Nk4oF//+
>>244
ありがとうございます。
ですが、ランダムに選ぶ場合は偶然あたった場合、
上から順の場合は他が使っていた場合のエラー処理はどうすれば良いのでしょうか?
できればmysqliで説明してくれると助かるのですが…
0246nobodyさん2014/05/06(火) 11:23:40.40ID:xK4xRkfj
【OS名】CentOS
【PHPのバージョン】6.5
【連携ソフトウェア】MySQL
【質問内容】
小さいというか小規模向けのフレームワークというのはないのでしょうか?
現在Codeigniterを使ったりしているのですが、MVCとして分けるほどのものでもないので
小規模向けのそういったフレームワークを探しています。
検索しても大きなものしか出てこないのですが無いので出てこないということでしょうか。
0247nobodyさん2014/05/06(火) 11:35:39.86ID:Nk4oF//+
>>245の続きです
流石に排他ロックされていないものを自動でSELECTできればいいなと思ったんですが、
giftcodeカラムの他にlockedカラムを作り、排他ロックする前にその行lockedをtrueにする、とプログラムを作れば
WHERE文で「lockedカラムがtrueでないもの」で探せば良いのではないかと考えました。
この考えはセキュリティ的に大丈夫でしょうか?
0248nobodyさん2014/05/06(火) 11:37:03.97ID:Nk4oF//+
>>247の「流石に」は無視でお願いします
流石に「排他ロックされていないものを自動でSELECT」は無理ですよね?
の書きかけです…
0249nobodyさん2014/05/06(火) 11:40:27.33ID:???
http://toro.2ch.net/test/read.cgi/db/1376466127/

こちらで聞いたら?
0250nobodyさん2014/05/06(火) 11:46:47.89ID:Nk4oF//+
>>249
データベース関係のですが、PHPで操作しているので
PHPの質問として質問してました…
次からはデータベースに近い質問はそちらでします…ありがとうございました
0251nobodyさん2014/05/06(火) 12:37:05.69ID:???
>>240
そう
でもそれだと書く量多いので工夫したい
02522442014/05/06(火) 12:45:16.85ID:???
>>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" フラグをいけると思いますが、
結局はそのフラグにも排他ロックが必要なのは同じなので、だったら無駄なことはせず、
上記のようなコードでいいと思います。
0253nobodyさん2014/05/06(火) 14:11:35.03ID:???
>>252
コードまでありがとうございます!
でも(SELECT文などの)待機中にDELETEされたら待機してる処理が実行不可能になってしまうのでは…
それとWHERE文で排他ロックされていない行を探すことは出来ないのでしょうか?
そのためにlockedフラグを作ろうとしているのですが…
お願いします
0254nobodyさん2014/05/06(火) 14:12:51.72ID:Nk4oF//+
すみません
>>253でIDを忘れてしまいました
0255nobodyさん2014/05/06(火) 15:53:45.85ID:???
>>254
トランザクションの理解が不十分に思える。
共有ロックと排他ロックについて自分で調べるといいよ。
SELECT ... FOR UPDATE
SELECT ... LOCK IN SHARE MODE

http://dev.mysql.com/doc/refman/5.1-olh/ja/innodb-locking-reads.html
0256nobodyさん2014/05/06(火) 17:20:52.83ID:???
>>253
lockedフラグの考え方でいいよ。
排他ロックの話は、ロック解除時に使用済みのギフトカードを取得することになるんじゃないのという懸念のとおり。

update tname set locked = true where giftcode = (select giftcode from tname where locked = false order by random() limit 1);
の結果が、1件になるまで繰り返して、1件になったときのレコードを処理すればいいよ。
0257nobodyさん2014/05/06(火) 17:21:25.53ID:???
繰り返す必要もないか。まぁ、そういうこと。
0258nobodyさん2014/05/06(火) 17:27:58.90ID:???
連投スマソ。
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かなにか

という流れでいいと思う。
0259nobodyさん2014/05/06(火) 17:49:35.47ID:???
>>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の削除は出来ないと思う
0260nobodyさん2014/05/06(火) 18:57:01.61ID:???
ロックのことはよくわからんけど、ギフトコードが連番って不正取得される危険高くならない?
チェックデジットとかを付与してバルクアクセスを防止したほうが良さそうだけどどうだろう
0261nobodyさん2014/05/06(火) 21:24:03.88ID:???
ここに書く都合でじゃない?
0262nobodyさん2014/05/06(火) 22:07:14.15ID:Nk4oF//+
>>256-261
ありがとうございます!
ここで質問するまで、誰かが取得したギフトコードは個別の何かに移動するとか考えてましたが、
>>260の方法を使うことにします、ありがとうございました!
それと、実際に使う場面ではAmazonギフト券のコードを使うのですが、他にセキュリティなどで気をつけることがあればご教授お願いします…
0263nobodyさん2014/05/07(水) 01:04:31.53ID:q/xRq63h
【OS名】CentOS
【PHPのバージョン】5.5
【連携ソフトウェア】なし
【質問内容】

標準「入出力」のストリームがほしいのですが
どうしたら作れますか?
0264nobodyさん2014/05/07(水) 03:36:35.00ID:???
>>263
http://www.php.net/manual/ja/features.commandline.io-streams.php
0265nobodyさん2014/05/07(水) 09:14:00.07ID:???
>>264
それ入出力じゃないよね
0266nobodyさん2014/05/07(水) 12:59:59.59ID:???
>>265
264じゃないけど
標準入出力 というものがあると思って言っている?
それともそういう便利に抽象化する何かを期待している?
0267nobodyさん2014/05/07(水) 14:06:40.85ID:???
r+のようなイメージで、読むときは標準入力、書くときは標準出力へと振り分けてくれる
便利なストリームはないのか、ということだと思うけど、ないと思う
0268nobodyさん2014/05/07(水) 14:10:00.10ID:???
ってあれ、どうしたら作れますか、か。
streamWrapperを使えば作れそうに見えるけど、試してみた?
0269nobodyさん2014/05/07(水) 15:12:51.75ID:???
>>268
なるほど
これでちょっとやってみます
0270nobodyさん2014/05/09(金) 03:22:37.99ID:f3K0xu9L
mail関数でBccを使って複数の人にメール送りたいのですが
toは省略できないのでしょうか? できないとしたら自分のアドレスを使うのでしょうか
02712702014/05/09(金) 03:34:27.28ID:f3K0xu9L
すみません。null にしても送信できました。
0272nobodyさん2014/05/09(金) 09:56:15.62ID:???
受け取った側が undisclosed-recipients; になるから
何か設定した方がいいと思うけどね。
0273nobodyさん2014/05/09(金) 12:40:35.68ID:???
>>251
これで書く量多いと思う理由は?
0274nobodyさん2014/05/09(金) 12:41:23.38ID:???
>>246
PHP6.5って何年後の話ですか?
■ このスレッドは過去ログ倉庫に格納されています