[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 05/09 18:38 / Filesize : 104 KB / Number-of Response : 378
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:nobodyさん [2009/02/18(水) 21:09:16 ID:xNLzAD7T]
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

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

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

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

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

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


269 名前:nobodyさん mailto:sage [2009/02/22(日) 00:00:19 ID:???]
>263
良く分からないけどやーいやーいうんこうんこー

270 名前:nobodyさん mailto:sage [2009/02/22(日) 00:13:17 ID:???]
うんこを馬鹿にしたやつ全員明日から便秘に悩む。



271 名前:nobodyさん [2009/02/22(日) 00:31:09 ID:bY3v8MvV]
>>270
のせいで、便秘ではないがうんこが止まらない。
この1時間で4回うんこにいっている


272 名前:nobodyさん mailto:sage [2009/02/22(日) 00:34:34 ID:???]
<?=str_repeat( 'うんこ', date('s') )?>


273 名前:234 [2009/02/22(日) 00:46:35 ID:JUr+Er3M]
リンクやPOSTで受け取るデータの他に、元のページから送られてくるデータって
何か無いかな・・・って考えてたら・・・$_SERVER['HTTP_REFERER']が使え
ないかなぁ?って思ったのですが。どうでしょうか?
例えばheaderのmetaとかでreferer urlを変更して、セッションIDを追加したり
とか出来ないでしょうか。
他にも、何か使えそうなデータって無いでしょうか?

274 名前:nobodyさん mailto:sage [2009/02/22(日) 01:01:49 ID:???]
>>273
refererは自由に変えられるし、飛ばさないブラウザもあるし信用ならないよ

まず別セッションにしたい理由がわからん
ユーザーに複数セッションを使わせたいという状況は想像できないし
自分が複数セッション使いたいならブラウザもうひとつ立ち上げればよいだけ

275 名前:234 [2009/02/22(日) 01:27:54 ID:JUr+Er3M]
>>274
refererが信用ならないのはおっしゃる通りです。ご指摘ありがとうございます。
リファラ出さないブラウザは対象外って事で良いのです。

複数セッションを使うために、別のブラウザを立ち上げれば済むのもご指摘通り。
自分だけで使うなら、その方が簡単なのですが。

例を挙げると、ウィンドウ1つに一人分の情報を表示/編集できる、マルチ・
ウィンドウの住所録ソフトみたいなものを想定しています。
ウィンドウ毎に別セッションにしないと無理じゃないかと思いました。
他に、定石があるようでしたら教えて下さい。
よろしくお願いいたします。

276 名前:nobodyさん mailto:sage [2009/02/22(日) 02:04:13 ID:???]
あなたがたは無職なのに
なんで質問に回答するときはえらそうな
態度なの?

277 名前:nobodyさん [2009/02/22(日) 03:06:25 ID:3nGhqmkB]
SQLite3 + PDO で、

1つ目のプロセスがトランザクション張ってて、
2つ目のプロセスがトランザクション張ろうとして、
当然1が既にデーターベースをロックしてるから、
2はロックを取得できなくて、そんで
SQLITE_BUSYが帰ってきて、
database is locked
ってわかったとき、
しばらくsleepさせて、リトライ
って処理、どうやって書けばいいの?

どっかにサンプルコードある?



278 名前:nobodyさん mailto:sage [2009/02/22(日) 04:28:08 ID:???]
>>277
そこまで分かってるならforなりでいくらでも書けそうだけど・・
具体的にどこが分からないのよ

279 名前:nobodyさん mailto:sage [2009/02/22(日) 18:00:44 ID:???]
例えばtp://test.jp/とういうサイトで、
ユーザ登録(ユーザ名をuserで登録)して、ページを開設する

tp://test.jp/user/ みたいに自分のページができる

このページを誰もがある程度操作できる(お絵かき掲示板とか、ブログのコメ投稿とか)
mixiなどのようにログインページがいらないので次回からこのページは
tp://test.jp/user/が存在する限り、だれもがこのurlから訪問することができる。

みたいなサイトみて思ったのですが、
1./user/の部分は実際にサイトの鯖でuser専用のディレクトリやそこに.phpなどを作っているのでしょうか?
2.それとも、apacheだったらhttpd.confなんかで、
tp://test.jp/mypage.php?userid=user → tp://test.jp/user/ みたいな変換をしているのでしょうか?
しかし2.の方法だと、userというページがあるかどうかをどうやって判断しているんでしょう・・
適当に、userid=tekitouとかしてみたときに、tp://test.jp/tekitou/となってしまい、そのページが
あるかないかの判断はいろんな方法でできると思うのですが、ユーザ登録が増えれば増えるほど
その判断する速度は落ちるような気がしてしまうのです・・

そもそも2の時点で他の方法でユーザを管理しているかもしれません、
上のようなサイトの、ユーザ管理とその引き出しはどう管理しているのか、
大体でもいいので教えていただけないでしょうか
よろしくお願いします

280 名前:278 [2009/02/22(日) 18:01:32 ID:euIhPE01]
id

281 名前:nobodyさん mailto:sage [2009/02/22(日) 18:03:04 ID:???]
>>279
今の主流は動的URLを性的URLに変化する

example.com/user/example.com/id=user
DBにデータを保存しておいてページのIDで呼び出す

282 名前:nobodyさん [2009/02/22(日) 18:09:47 ID:euIhPE01]
すいません>>280の名前は279でした

>>281
なるほど、DBを使ってユーザーのページに誰かが訪れるその度に
検索呼び出ししているということでしょうか。
なんかすっきりしましたありがとうございました

283 名前:nobodyさん mailto:sage [2009/02/22(日) 18:12:49 ID:???]
>>282
ちなみに毎回DBから同じ情報ひっぱってくるのは負荷かかるから
キャッシュを使ってるのが多いと思う
(ここはまたSmartyとか覚えたときにやってみるといい)

284 名前:nobodyさん [2009/02/22(日) 18:16:29 ID:euIhPE01]
>>283
Smartyですか、参考に調べてみます
ありがとうございました!

285 名前:nobodyさん [2009/02/22(日) 21:21:50 ID:3nGhqmkB]
>>278
while で書いたけど、
deadlockになるのです

286 名前:nobodyさん mailto:sage [2009/02/22(日) 21:47:52 ID:???]
具体的にどう書いたか見せたほうが答えてもらいやすいと思うが・・
恥ずかしがらないで

287 名前:nobodyさん [2009/02/22(日) 21:50:36 ID:3nGhqmkB]
>>286
1.php と 2.php と2つのファイルを用意して、
以下のテストを行いました。

「テスト1」
1.phpを単独で実行する -> OK

「テスト2」
2.phpを単独で実行する -> OK

「テスト3」
1.php -> 2.php という順番で実行する -> deadlock発生

こういう状況です。



288 名前:nobodyさん [2009/02/22(日) 21:52:30 ID:3nGhqmkB]
1.phpは、トランザクション中に
sleep(10);
をかませて、ゆっくり実行するようにしてあります。

このゆっくりタイムに、いそいで2.phpを実行する、という
テストです。

289 名前:nobodyさん [2009/02/22(日) 21:53:36 ID:3nGhqmkB]
環境は、PHP5 + PDO + SQLite3 です。

データーベース構造は、

id | name| value
1 | bond | 5

database name = test1

table name= tb1

です。

290 名前:nobodyさん [2009/02/22(日) 21:54:35 ID:3nGhqmkB]
1.php のソースは以下の通りです

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;

while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");
sleep(10);

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
// Update failed. Wait a while before trying again in the next loop
}
}
?>

291 名前:nobodyさん [2009/02/22(日) 21:55:09 ID:3nGhqmkB]
2.phpは、以下の通りです

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;

while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");
$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
// Update failed. Wait a while before trying again in the next loop
sleep(15);
}
}
?>

292 名前:nobodyさん [2009/02/22(日) 21:57:20 ID:3nGhqmkB]
1.phpと2.phpの違いは、sleep(10)があるか、ないかというだけです。
それ以外は全部同じです。

SQLiteはトランザクション中に、別のトランザクションを発生させようとすると
1秒も待たずに「database is locked」になるので、
ウエイト->リトライ、という処理を自分で書かないといけません。

これがイマイチ普及しない最大のポイントだと思いますが、
その処理の書き方についての質問です。

なぜかデッドロックになってしまうのです

293 名前:nobodyさん mailto:sage [2009/02/22(日) 21:57:20 ID:???]
え?ループ内にトランザクション?

294 名前:nobodyさん [2009/02/22(日) 21:57:55 ID:3nGhqmkB]
>>293
だってリトライしないといけないわけだから。
なんか間違ってる?

295 名前:nobodyさん mailto:sage [2009/02/22(日) 22:01:33 ID:???]
例外が発生するポイントは、beginかexecか調べた?

296 名前:nobodyさん [2009/02/22(日) 22:03:13 ID:3nGhqmkB]
>>295
例外は発生しないにょ

ずーーーっと実行中のままになって、
最後にはタイムアウトになるんだにょ

PHPのデフォルトタイムアウトが60秒だから
60秒でタイムアウトになるにょ

297 名前:nobodyさん mailto:sage [2009/02/22(日) 22:04:43 ID:???]
>>296
おいおい、
例外にならなかったら、falseが設定されるでしょうが。
例外をcatchして捨ててるだけでしょうが。



298 名前:nobodyさん mailto:sage [2009/02/22(日) 22:06:21 ID:???]
beginTransactionでオートコミットモードがオフになる。
execに失敗する。
もう一度、beginTransactionをかけるが、既にbeginされてるので例外発生
で、またループ。
beginをループの外に出すかcatchしたときにロールバックしてみたらどうかね

299 名前:nobodyさん mailto:sage [2009/02/22(日) 22:13:32 ID:???]
EC-CUBEのカスタマイズで1000万て安い?
ちなみに1年、5人担当

300 名前:nobodyさん [2009/02/22(日) 22:15:02 ID:3nGhqmkB]
>>297
そしたら、catchの中で、
例外をprintするように改造して
もう一回試してみるよ

301 名前:nobodyさん [2009/02/22(日) 22:15:38 ID:3nGhqmkB]
>>299
一人当たり200万円しかもらえないじゃん

302 名前:nobodyさん [2009/02/22(日) 22:17:17 ID:3nGhqmkB]
例外を補足するようにコードを改造してみました。

一番下のところに

catch (PDOException $e) {
print( $e->getMessage());
}

って入れただけですけど。

そしたら、以下のようになりました。

303 名前:nobodyさん [2009/02/22(日) 22:19:02 ID:3nGhqmkB]
1.php

Fatal error: Maximum execution time of 60 seconds exceeded in
C:\1.php on line 21

(さっきと同じ結果)


--------------------------------------------------------
2.php

SQLSTATE[HY000]:
General error: 5
database is locked
There is already an active transaction
There is already an active transaction
There is already an active transaction

Fatal error: Maximum execution time of 60
seconds exceeded in C:\2.php on line 28

--------------------------------------------------------
2.phpについて、いままで出ていなかった
例外がレポートされるようになりました。

304 名前:nobodyさん [2009/02/22(日) 22:22:34 ID:3nGhqmkB]
>>298
exec ってオートコミットモードがONでないと使えないのですか?

もしかして、

$sql="UPDATE tb1 SET value = value + 1 WHERE id = '1'";
$sth = $dbh->prepare($sql);//プリペアードステートメント
$sth->execute();//エクスキュート

とかってやればOK?

305 名前:nobodyさん mailto:sage [2009/02/22(日) 22:26:36 ID:???]
そうじゃなくて、begin済みなのにbeginするなってこと。
1.phpで例外が出ないで無限ループするのはおかしいからチェックしてみ

306 名前:nobodyさん [2009/02/22(日) 22:29:18 ID:3nGhqmkB]
>>305
biginをループの外に出したら意味ないのでは?

だってリトライできなくなるし。

307 名前:nobodyさん mailto:sage [2009/02/22(日) 22:31:48 ID:???]
>>306
ろーるばっくすればいいじゃん
>>298さんが正解でしょ



308 名前:nobodyさん [2009/02/22(日) 22:34:36 ID:3nGhqmkB]
とりあえずわけわかんなくなってきたので、
改造済みのコードを改めてはります。

309 名前:nobodyさん [2009/02/22(日) 22:35:58 ID:3nGhqmkB]
1.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}
$bUpdatePending = true;
while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");
sleep(10);

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
sleep(1);
}
catch (PDOException $e) {



print( $e->getMessage());
$oDbCxn->rollback();
}
}
?>

310 名前:nobodyさん mailto:sage [2009/02/22(日) 22:46:19 ID:???]
1.php側はループさせると、テストにならんから、
実行中のsleepだけでいいことにして、ループ外した方がよさげ。

それから、ロック以外の例外の時も無限ループしちゃうわけで・・・
まぁ、テストだからいいけど。

311 名前:nobodyさん mailto:sage [2009/02/22(日) 22:47:07 ID:???]
例外分かってないのでは?

312 名前:nobodyさん mailto:sage [2009/02/22(日) 22:48:00 ID:???]
トランザクションも怪しいw

313 名前:nobodyさん [2009/02/22(日) 23:08:50 ID:3nGhqmkB]
>>310
そしたらループはずしてみようかな?

314 名前:nobodyさん [2009/02/22(日) 23:17:01 ID:3nGhqmkB]
よく考えたら、ロールバックしろ、とかいうアドバイスは無意味だな

だってdatabase is lockedっていうエラーが出ているわけだから、
トランザクションをゲットできていないわけだから、
そもそもロールバックなんかしないわけで。

315 名前:nobodyさん [2009/02/22(日) 23:19:21 ID:3nGhqmkB]
ソースコードを改変したので、
3.phpと4.phpということにしました。

3.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;

try {
$oDbCxn->beginTransaction();

$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");
sleep(10);

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
sleep(1);
}
catch (PDOException $e) {
print( $e->getMessage());
$oDbCxn->rollback();
}
?>

316 名前:nobodyさん mailto:sage [2009/02/22(日) 23:20:11 ID:???]
>>315
前よく「質問」って書いてた人?

317 名前:nobodyさん [2009/02/22(日) 23:20:13 ID:3nGhqmkB]
4.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;
while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
// Update failed. Wait a while before trying again in the next loop
print( $e->getMessage());
$oDbCxn->rollback();

}
}
?>



318 名前:nobodyさん [2009/02/22(日) 23:22:14 ID:3nGhqmkB]
3.php −> 4.php
という順番で実行する流れです

3.php −>10秒待つ
4.php −>待たないですぐに実行

319 名前:nobodyさん [2009/02/22(日) 23:22:53 ID:3nGhqmkB]
実験結果

3.php エラー無し
カウントアップは成功している

4.php
SQLSTATE[HY000]: General error: 5 database is locked
カウントアップは成功している

320 名前:nobodyさん [2009/02/22(日) 23:36:10 ID:3nGhqmkB]
あれ?
もしかして、完成?
成功している??

321 名前:nobodyさん mailto:sage [2009/02/22(日) 23:38:30 ID:???]
>>314
なんか勘違いしてないかい?

322 名前:nobodyさん [2009/02/23(月) 00:01:27 ID:DYtiHKsN]
これでうまくいった

7.php −> 8.php
7.php wait 10seconds
8.php wait 0

7.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}
$bUpdatePending = true;
while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");
sleep(10);
$oDbCxn->commit();
$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
sleep(3);
$oDbCxn->rollback();
}
}
?>

323 名前:nobodyさん [2009/02/23(月) 00:02:02 ID:DYtiHKsN]
8.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;

while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
sleep(3);
$oDbCxn->rollback();
}
}
?>

324 名前:nobodyさん [2009/02/23(月) 00:03:11 ID:DYtiHKsN]
でも、8.phpの最後のほうの、

sleep(3);
$oDbCxn->rollback();


これなんだけど、せっかくsleepを入れたのに、
sleepしているようすが見られない。

7.phpの実行が終わると、即座に
間髪いれずに、8.phpの実行も終了している。

なんでだ?
3秒待ってからロールバックしてるんじゃないのか?

325 名前:nobodyさん [2009/02/23(月) 00:03:49 ID:DYtiHKsN]
あと、トランザクションをゲットしていないのに、
ロールバックするという意味がわからん。

いったいどこに戻っているというのだ?

326 名前:nobodyさん mailto:sage [2009/02/23(月) 00:16:50 ID:???]
database is lockedはトランザクション自体ではなく、
その中のUPDATE文に対してのエラーである。
なので、トランザクション自体は開始されているので、
一旦ろーるばっくでトランザクションを改めてトランザクションを開始している。

327 名前:nobodyさん mailto:sage [2009/02/23(月) 00:17:43 ID:???]
>一旦ろーるばっくでトランザクションを改めてトランザクションを開始している。
一旦ろーるばっくでトランザクションを閉じて、改めてトランザクションを開始している。



328 名前:nobodyさん [2009/02/23(月) 00:19:44 ID:DYtiHKsN]
>>326-327

なるほどねー
ようやくわかってきたわぁ
 きたわぁ
  きたわぁ

329 名前:nobodyさん [2009/02/23(月) 00:22:06 ID:DYtiHKsN]
やっぱあれだな。
SQLiteの4つのロックのうち、
すぐにロックを獲得できるのを、
明示的に書かないとだめだな。

$oDbCxn->beginTransaction();

↑これがダメってこと。
なぜなら、↑だと、デフォルトのロックが選択される。
SQLiteにおける、デフォルトのロックとは、defferd lockである。

これだと遅延するから、4つの処理をトランザクションではさみたい、
などという場合には不向き。

330 名前:nobodyさん mailto:sage [2009/02/23(月) 00:29:36 ID:???]
busy_timeoutの設定をするんじゃだめなのか?

331 名前:nobodyさん [2009/02/23(月) 00:45:25 ID:DYtiHKsN]
>>330
やったことある?

332 名前:nobodyさん [2009/02/23(月) 00:58:26 ID:DYtiHKsN]
もう一つの懸念。
SQLiteはNFSというファイルシステムを使っているマシンで実行すると
ぶっこわれるらしい。

NFSとはおもにUNIXで使われるファイルシステムらしい。
特にfreeBSDでよく使われるらしい。

自分が借りているレンタルサーバーはfreeBSDなので、
ひょっとしてSQLiteは使えないんじゃないか?

333 名前:nobodyさん mailto:sage [2009/02/23(月) 01:02:31 ID:???]
NFS使ってるレンタルサーバなんてないから安心しろw

334 名前:nobodyさん mailto:sage [2009/02/23(月) 01:02:40 ID:???]
jp.php.net/manual/ja/function.sqlite-open.php

>ヒント
>NFSパーティションにマウントされたSQLiteデータベースを処理すること は推奨されません。
>ロックに関してNFSは著しい問題があるので、 データベースを全くオープンすることさえできない可能性があります。
>ま た、成功した場合でも、ロックに関する動作は予測できない結果を生む可 能性があります。

だってさ。こっち調べるのが先じゃない?w

335 名前:nobodyさん [2009/02/23(月) 01:02:48 ID:DYtiHKsN]
SQLiteには、

deferred,
immediate,
exclusive

という3つの種類のロックがあるが、
どれを使うべきか?というのは、考えなくていいの?

$dbh->beginTransaction();

これを使うと、自動的に、デフォルトの、ロックが
選択される。SQLiteにおけるデフォルトのロックとは
deferred ロックである。

もし銀行口座などの実装をしたい場合、
exclusiveにしないとダメなのではないか?

また、immediateって、なんのためにあるんだ?
いつ使うんだ?

336 名前:nobodyさん [2009/02/23(月) 01:03:21 ID:DYtiHKsN]
>>333
よかった

337 名前:nobodyさん mailto:sage [2009/02/23(月) 01:07:02 ID:???]
ロックとトランザクションの違いを勉強してきたほうがいいんじゃないかな?



338 名前:nobodyさん mailto:sage [2009/02/23(月) 01:07:46 ID:???]
俺もそう思うw

339 名前:nobodyさん mailto:sage [2009/02/23(月) 01:29:03 ID:???]
こいつ前いたキティだろ
通報しましたとかsqlite関連で腐るほど書き込んでた

340 名前:nobodyさん mailto:sage [2009/02/23(月) 01:29:11 ID:???]
WikiとCMSってどう違うの

341 名前:nobodyさん mailto:sage [2009/02/23(月) 01:36:09 ID:???]
>>316をスルーしてる時点で確定

342 名前:nobodyさん mailto:sage [2009/02/23(月) 01:38:00 ID:???]
>>340
WikiもCMSの一種だよ
Wikiが他のCMSと違うのは、不特定多数によるサイト構築を主体とした構成になっている

つかPHP関係ないじゃん

343 名前:nobodyさん [2009/02/23(月) 02:23:27 ID:DYtiHKsN]
もしかしてwhileいらないんじゃないか?
sleepしてrollbackだけでいいんじゃないか?

344 名前:nobodyさん mailto:sage [2009/02/23(月) 03:33:25 ID:???]
こいつプログラム板の方とマルチだった
pc11.2ch.net/test/read.cgi/tech/1232712334/284-

345 名前:nobodyさん mailto:sage [2009/02/23(月) 03:44:00 ID:???]
派遣先の歓迎会などで、趣味を聞かれることがあります。
私の趣味は豊富で下記のとおりです。
・アニメ、エロゲ、同人誌、アニソン
・風俗、ストリップ鑑賞
・声優、秋葉系アイドルイベント参加

しかし、これを言うと、おそらくひかれてしまいます。。。
なんて言えばよいのでしょうか?

休みの日は何をしてる?と聞かれても、声優ライブの最前線で
サイリウムをもって、跳んでいるなんて言えません。

346 名前:nobodyさん [2009/02/23(月) 04:39:47 ID:cBNbBaFX]
$a = "aaa"

if(preg_match("/^[0-9]+$/",$a) == true){
echo "ok";
}else{
echo "dame";
}

でdameになってくれるのに(if(preg_match("/^[0-9]+$/",$a)でもいけた)、

if(preg_match("/^[0-9]+$/",$a) !== false){
echo "ok";
}else{
echo "dame";
}

だと$aを何にしても全部okになる・・
なんで><

347 名前:nobodyさん [2009/02/23(月) 04:40:33 ID:cBNbBaFX]
→$a = "aaa";



348 名前:nobodyさん mailto:sage [2009/02/23(月) 04:52:33 ID:???]
>>346
jp.php.net/preg_match

349 名前:nobodyさん [2009/02/23(月) 05:29:48 ID:DYtiHKsN]
<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;

while ($bUpdatePending) {
try {
$oDbCxn->query("BEGIN EXCLUSIVE TRANSACTION");

// $oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
print $e->getMessage();

$oDbCxn->rollback();
}
}
?>

350 名前:nobodyさん [2009/02/23(月) 05:30:39 ID:DYtiHKsN]
>>349
実行すると、なんでエラーになるの?

PHP5 + PDO + SQLite3
----------------------------------
database structure

id | name| value

1 | value| 5
-------------------------------
database name = test1

table name= tb1

351 名前:nobodyさん [2009/02/23(月) 05:33:14 ID:DYtiHKsN]
トランザクションをスタートするのに、
$oDbCxn->query("BEGIN EXCLUSIVE TRANSACTION");
はダメで、
$oDbCxn->beginTransaction();
なら良い、というのはおかしい。
なぜエラーになるの?

352 名前:nobodyさん [2009/02/23(月) 06:48:25 ID:c878IibK]
教えて下さい。

test.txt というutf-8のファイルがあって中に文とかphpの変数とかが書いてあります。
これをsjisのtest.phpで読み込み表示させたいのですがincudeだと文字化けします。
どうすれば表示できますか?

353 名前:nobodyさん mailto:sage [2009/02/23(月) 06:59:44 ID:???]
<meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS" />
を吐いてやる

354 名前:nobodyさん mailto:sage [2009/02/23(月) 07:08:52 ID:???]
>>353
その知識で回答しようと思えるなんて素直に感心するよ

355 名前:nobodyさん [2009/02/23(月) 07:20:40 ID:cBNbBaFX]
>>348
自分なりに調べてみました><
mb_eregでは !== false でいけたので、それも一緒に比べてみたら
返り値のとこが、
mb_ereg
>正規表現に一致しないか、 エラーを発生した場合に FALSE を返します。
preg_match
>preg_match() は、エラーが発生した場合にFALSEを返します。
でした。
preg_matchは正規表現に一致しないときはfalseを返してくれないので、
!== falseがスルーされたということでよいのでしょうか?><
今まで全部!== falseでできると思っててそれでやってたので変更が大変ですが
preg_matchのときは==とか何もつけないバージョンでやっておきます><
ありがとうございました

356 名前:nobodyさん mailto:sage [2009/02/23(月) 07:29:25 ID:???]
>>352
逆だUTF-8の方
両方使いたいなら変換かけるべし

357 名前:nobodyさん mailto:sage [2009/02/23(月) 16:02:31 ID:???]
OS linux
PHP ver 5.2.5
連携 とくになし
<?
//------------------------------------------------
//ペット可否
//------------------------------------------------
function GetPet_F($int)
{
$res = "";
if($int=="0") $res = "不可";
else $res = "可能";
return $res;
}
print GetPet_F(0);
?>
以上ソースコードでsyntax error, unexpected $end出るんですが何が原因なんでしょうか・・・



358 名前:357 [2009/02/23(月) 16:02:51 ID:yJ3BEx4Z]
ID出すの忘れ

359 名前:nobodyさん mailto:sage [2009/02/23(月) 16:12:39 ID:???]
あれ、流出してる?

360 名前:nobodyさん mailto:sage [2009/02/23(月) 16:31:29 ID:???]
>>352
eval(mb_convert_encoding(file_get_contents('test.txt'), 'Shift-JIS', 'UTF-8'));

>>357
構文に間違いはないから
スクリプトのエンコーディングが mbstring.script_encoding と合ってないんでしょう

361 名前:nobodyさん [2009/02/23(月) 16:37:17 ID:yJ3BEx4Z]
可能の能抜いたらエラー出なかったです・・・
なんなのだろう

362 名前:nobodyさん mailto:sage [2009/02/23(月) 16:46:30 ID:???]
>>357
原因は、Shift Jisの5C問題だね。
能のShift Jisのコードが94 5C
5Cはバックスラッシュ(Shift Jisだと¥)なので、
PHPのパーサが、終わりのダブルクォーテーションを文字列と認識してしまう。
結果、文字列が閉じられていないと判断されて、エラーになる。


363 名前:nobodyさん mailto:sage [2009/02/23(月) 17:31:12 ID:???]
今時SJISでスクリプト書くやつなんていんの?

話は変わるが

echo '<table 〜'.
'〜〜〜〜〜〜〜〜〜'.
'〜〜〜〜〜〜〜〜〜'.
'〜〜〜〜〜〜〜〜〜'.
'〜〜〜〜〜〜〜〜〜';

引継ぎでプログラムのソースコード見たらこうなってた
まじ簡便してくれ・・・orz
あと、同じ要領でechoでJavaScriptとか吐き出してるのもやめてくれ

クエリはまだ許せる

仕事でプログラムするときはほかの人にわかりやすいコードにしてください
これまじでお願い

364 名前:nobodyさん mailto:sage [2009/02/23(月) 17:59:46 ID:???]
--enable-zend-multibyte付けてmbstring.script_encodingを設定すりゃ
Shift-JISだろうが何で書こうがそいつの自由だ
雑談スレに行けクズ

365 名前:nobodyさん [2009/02/23(月) 21:03:10 ID:cBNbBaFX]
また質問させていただきます
$aa = "AA";
$bb = "bb";

$sql = "SELECT * FROM v001upfile WHERE :AA = :BB";
$result = executeQuery($sql);
$result->bindParam(":AA",$aa,PDO::PARAM_STR);
$result->bindParam(":BB",$bb,PDO::PARAM_STR);
$result->execute();

$row = $result->fetchAll();
$rows = count($row);

のようにすると、whereに該当するデータがなく、$rowsも0になってしまいます。いろいろしていると、
$sql = "SELECT * FROM v001upfile WHERE AA = :BB";
とするとデータが得られました。
どうやらwhere :AAのbindのパラメータ、PDO::PARAM_STR
で、'AA'とされてしまっているから?、だめのような気がするのですが、
解決策ありましたらよろしくおねがいします

366 名前:nobodyさん mailto:sage [2009/02/23(月) 21:21:42 ID:???]
>>365
それ駄目だ、俺も悩んだ
WHERE $AA = ?か、 ? = ?にしたよ
SELECTでbindValueとbindParamは使わない方がいいって
グーグル先生が言ってた

367 名前:nobodyさん mailto:sage [2009/02/23(月) 21:33:37 ID:???]
PDO::PARAM_STMT



368 名前:nobodyさん mailto:sage [2009/02/23(月) 21:36:22 ID:???]
カラム名にPARAM_STR使うなよ
アホかw

369 名前:nobodyさん [2009/02/23(月) 22:03:46 ID:ikSisMyc]
【OS名】CentOS 5.0
【PHPのバージョン】php5.2
【連携ソフトウェア】JavaScript Smarty
【質問内容】
ユーザがログインに成功したときにセッションに値をセットして
次にページにアクセスしてきた時にSmartyで値があるか確認して初期化処理

例:
{{if $smarty.session.foo == 'bar'}}
init(); //これはJScriptの関数
{{/if}}

をしたいんですけど、ブラウザを終了するとセッションまで破棄されてしまいます。
ご教授お願いいたします。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<104KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef