【PHP】下らねぇ質問はID出して書き込みやがれ 81
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/02/18(水) 21:09:16ID:xNLzAD7T過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 80
http://pc11.2ch.net/test/read.cgi/php/1233479457/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0259nobodyさん
2009/02/21(土) 21:49:18ID:???放禁みたいなNGフィルター、SNS用の権限フィルター
多端末対策で文字コード変換フィルター
スクリプト許可端末、スクリプト拒否端末用の変換フィルター
タグ許可・不許可
まぁ、なんでもいいでしょ
0260nobodyさん
2009/02/21(土) 22:00:32ID:???検証。入力値などに問題が無いかをチェックする(チェックした後どうするかは知らない)。
フィルタ
入力値をチェックし、ヤバいものは除去する、ないし弾く(エラーにする、無視する)。
サニタイズ
消毒。転じて無害化。害の無いものにする。変換・置換など無害化の方法は多数あるが。。
エスケープ
ある環境で特殊な意味を持つ値(HTMLならば<など)を、その環境のルールで規定された別の表現(<)に置き換える。
ダブルクォート中で"の前にバックスラッシュを置くのもエスケープ。
どれがベストかというと、どの表現も曖昧さが残るので使うべきではない。
DBへの入力の無害化処理と、HTML出力への無害化処理は違うし、無害化の方法も1通りではない。
設計初期などで抽象度を残した表現をしたい時くらいしか使わないな。
>259は文脈を意図的に曲解した例。
0261nobodyさん
2009/02/21(土) 22:01:28ID:???htmlspecialchars=html適合化っていう具体的かつ正確な言葉があるのに、
曖昧かつ誤解に満ちて見解が分かれるサニタイズなんて言葉にする必要はないだろ。
0262nobodyさん
2009/02/21(土) 22:01:39ID:???> 別の表現(<)に置き換える。
な。
0263nobodyさん
2009/02/21(土) 22:05:41ID:???> ダブルクォート中で"の前にバックスラッシュを置くのもエスケープ
PHPとかJSならエスケープだが、HTML中でこれができると思ってしまう奴もいるらしいからな。
HTML出力時にaddslashesするやつとか、
DBに入れる前にhtmlspecialcharsする奴とか、
入力時に両方処理する奴とか、
ほんと、ウンコだな
0266nobodyさん
2009/02/21(土) 23:33:28ID:???0269nobodyさん
2009/02/22(日) 00:00:19ID:???良く分からないけどやーいやーいうんこうんこー
0270nobodyさん
2009/02/22(日) 00:13:17ID:???0271nobodyさん
2009/02/22(日) 00:31:09ID:bY3v8MvVのせいで、便秘ではないがうんこが止まらない。
この1時間で4回うんこにいっている
0272nobodyさん
2009/02/22(日) 00:34:34ID:???0273234
2009/02/22(日) 00:46:35ID:JUr+Er3M何か無いかな・・・って考えてたら・・・$_SERVER['HTTP_REFERER']が使え
ないかなぁ?って思ったのですが。どうでしょうか?
例えばheaderのmetaとかでreferer urlを変更して、セッションIDを追加したり
とか出来ないでしょうか。
他にも、何か使えそうなデータって無いでしょうか?
0274nobodyさん
2009/02/22(日) 01:01:49ID:???refererは自由に変えられるし、飛ばさないブラウザもあるし信用ならないよ
まず別セッションにしたい理由がわからん
ユーザーに複数セッションを使わせたいという状況は想像できないし
自分が複数セッション使いたいならブラウザもうひとつ立ち上げればよいだけ
0275234
2009/02/22(日) 01:27:54ID:JUr+Er3Mrefererが信用ならないのはおっしゃる通りです。ご指摘ありがとうございます。
リファラ出さないブラウザは対象外って事で良いのです。
複数セッションを使うために、別のブラウザを立ち上げれば済むのもご指摘通り。
自分だけで使うなら、その方が簡単なのですが。
例を挙げると、ウィンドウ1つに一人分の情報を表示/編集できる、マルチ・
ウィンドウの住所録ソフトみたいなものを想定しています。
ウィンドウ毎に別セッションにしないと無理じゃないかと思いました。
他に、定石があるようでしたら教えて下さい。
よろしくお願いいたします。
0276nobodyさん
2009/02/22(日) 02:04:13ID:???なんで質問に回答するときはえらそうな
態度なの?
0277nobodyさん
2009/02/22(日) 03:06:25ID:3nGhqmkB1つ目のプロセスがトランザクション張ってて、
2つ目のプロセスがトランザクション張ろうとして、
当然1が既にデーターベースをロックしてるから、
2はロックを取得できなくて、そんで
SQLITE_BUSYが帰ってきて、
database is locked
ってわかったとき、
しばらくsleepさせて、リトライ
って処理、どうやって書けばいいの?
どっかにサンプルコードある?
0279nobodyさん
2009/02/22(日) 18:00:44ID:???ユーザ登録(ユーザ名を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の時点で他の方法でユーザを管理しているかもしれません、
上のようなサイトの、ユーザ管理とその引き出しはどう管理しているのか、
大体でもいいので教えていただけないでしょうか
よろしくお願いします
0280278
2009/02/22(日) 18:01:32ID:euIhPE010281nobodyさん
2009/02/22(日) 18:03:04ID:???今の主流は動的URLを性的URLに変化する
http://example.com/user/→http://example.com/id=user
DBにデータを保存しておいてページのIDで呼び出す
0282nobodyさん
2009/02/22(日) 18:09:47ID:euIhPE01>>281
なるほど、DBを使ってユーザーのページに誰かが訪れるその度に
検索呼び出ししているということでしょうか。
なんかすっきりしましたありがとうございました
0283nobodyさん
2009/02/22(日) 18:12:49ID:???ちなみに毎回DBから同じ情報ひっぱってくるのは負荷かかるから
キャッシュを使ってるのが多いと思う
(ここはまたSmartyとか覚えたときにやってみるといい)
0284nobodyさん
2009/02/22(日) 18:16:29ID:euIhPE01Smartyですか、参考に調べてみます
ありがとうございました!
0285nobodyさん
2009/02/22(日) 21:21:50ID:3nGhqmkBwhile で書いたけど、
deadlockになるのです
0286nobodyさん
2009/02/22(日) 21:47:52ID:???恥ずかしがらないで
0287nobodyさん
2009/02/22(日) 21:50:36ID:3nGhqmkB1.php と 2.php と2つのファイルを用意して、
以下のテストを行いました。
「テスト1」
1.phpを単独で実行する -> OK
「テスト2」
2.phpを単独で実行する -> OK
「テスト3」
1.php -> 2.php という順番で実行する -> deadlock発生
こういう状況です。
0288nobodyさん
2009/02/22(日) 21:52:30ID:3nGhqmkBsleep(10);
をかませて、ゆっくり実行するようにしてあります。
このゆっくりタイムに、いそいで2.phpを実行する、という
テストです。
0289nobodyさん
2009/02/22(日) 21:53:36ID:3nGhqmkBデーターベース構造は、
id | name| value
1 | bond | 5
database name = test1
table name= tb1
です。
0290nobodyさん
2009/02/22(日) 21:54:35ID:3nGhqmkB<?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
}
}
?>
0291nobodyさん
2009/02/22(日) 21:55:09ID:3nGhqmkB<?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);
}
}
?>
0292nobodyさん
2009/02/22(日) 21:57:20ID:3nGhqmkBそれ以外は全部同じです。
SQLiteはトランザクション中に、別のトランザクションを発生させようとすると
1秒も待たずに「database is locked」になるので、
ウエイト->リトライ、という処理を自分で書かないといけません。
これがイマイチ普及しない最大のポイントだと思いますが、
その処理の書き方についての質問です。
なぜかデッドロックになってしまうのです
0293nobodyさん
2009/02/22(日) 21:57:20ID:???0294nobodyさん
2009/02/22(日) 21:57:55ID:3nGhqmkBだってリトライしないといけないわけだから。
なんか間違ってる?
0295nobodyさん
2009/02/22(日) 22:01:33ID:???0296nobodyさん
2009/02/22(日) 22:03:13ID:3nGhqmkB例外は発生しないにょ
ずーーーっと実行中のままになって、
最後にはタイムアウトになるんだにょ
PHPのデフォルトタイムアウトが60秒だから
60秒でタイムアウトになるにょ
0297nobodyさん
2009/02/22(日) 22:04:43ID:???おいおい、
例外にならなかったら、falseが設定されるでしょうが。
例外をcatchして捨ててるだけでしょうが。
0298nobodyさん
2009/02/22(日) 22:06:21ID:???execに失敗する。
もう一度、beginTransactionをかけるが、既にbeginされてるので例外発生
で、またループ。
beginをループの外に出すかcatchしたときにロールバックしてみたらどうかね
0299nobodyさん
2009/02/22(日) 22:13:32ID:???ちなみに1年、5人担当
0300nobodyさん
2009/02/22(日) 22:15:02ID:3nGhqmkBそしたら、catchの中で、
例外をprintするように改造して
もう一回試してみるよ
0301nobodyさん
2009/02/22(日) 22:15:38ID:3nGhqmkB一人当たり200万円しかもらえないじゃん
0302nobodyさん
2009/02/22(日) 22:17:17ID:3nGhqmkB一番下のところに
catch (PDOException $e) {
print( $e->getMessage());
}
って入れただけですけど。
そしたら、以下のようになりました。
0303nobodyさん
2009/02/22(日) 22:19:02ID:3nGhqmkBFatal 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について、いままで出ていなかった
例外がレポートされるようになりました。
0304nobodyさん
2009/02/22(日) 22:22:34ID:3nGhqmkBexec ってオートコミットモードがONでないと使えないのですか?
もしかして、
$sql="UPDATE tb1 SET value = value + 1 WHERE id = '1'";
$sth = $dbh->prepare($sql);//プリペアードステートメント
$sth->execute();//エクスキュート
とかってやればOK?
0305nobodyさん
2009/02/22(日) 22:26:36ID:???1.phpで例外が出ないで無限ループするのはおかしいからチェックしてみ
0306nobodyさん
2009/02/22(日) 22:29:18ID:3nGhqmkBbiginをループの外に出したら意味ないのでは?
だってリトライできなくなるし。
0308nobodyさん
2009/02/22(日) 22:34:36ID:3nGhqmkB改造済みのコードを改めてはります。
0309nobodyさん
2009/02/22(日) 22:35:58ID:3nGhqmkB<?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();
}
}
?>
0310nobodyさん
2009/02/22(日) 22:46:19ID:???実行中のsleepだけでいいことにして、ループ外した方がよさげ。
それから、ロック以外の例外の時も無限ループしちゃうわけで・・・
まぁ、テストだからいいけど。
0311nobodyさん
2009/02/22(日) 22:47:07ID:???0312nobodyさん
2009/02/22(日) 22:48:00ID:???0313nobodyさん
2009/02/22(日) 23:08:50ID:3nGhqmkBそしたらループはずしてみようかな?
0314nobodyさん
2009/02/22(日) 23:17:01ID:3nGhqmkBだってdatabase is lockedっていうエラーが出ているわけだから、
トランザクションをゲットできていないわけだから、
そもそもロールバックなんかしないわけで。
0315nobodyさん
2009/02/22(日) 23:19:21ID:3nGhqmkB3.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();
}
?>
0317nobodyさん
2009/02/22(日) 23:20:13ID:3nGhqmkB<?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();
}
}
?>
0318nobodyさん
2009/02/22(日) 23:22:14ID:3nGhqmkBという順番で実行する流れです
3.php −>10秒待つ
4.php −>待たないですぐに実行
0319nobodyさん
2009/02/22(日) 23:22:53ID:3nGhqmkB3.php エラー無し
カウントアップは成功している
4.php
SQLSTATE[HY000]: General error: 5 database is locked
カウントアップは成功している
0320nobodyさん
2009/02/22(日) 23:36:10ID:3nGhqmkBもしかして、完成?
成功している??
0322nobodyさん
2009/02/23(月) 00:01:27ID:DYtiHKsN7.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();
}
}
?>
0323nobodyさん
2009/02/23(月) 00:02:02ID: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->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();
}
}
?>
0324nobodyさん
2009/02/23(月) 00:03:11ID:DYtiHKsNsleep(3);
$oDbCxn->rollback();
これなんだけど、せっかくsleepを入れたのに、
sleepしているようすが見られない。
7.phpの実行が終わると、即座に
間髪いれずに、8.phpの実行も終了している。
なんでだ?
3秒待ってからロールバックしてるんじゃないのか?
0325nobodyさん
2009/02/23(月) 00:03:49ID:DYtiHKsNロールバックするという意味がわからん。
いったいどこに戻っているというのだ?
0326nobodyさん
2009/02/23(月) 00:16:50ID:???その中のUPDATE文に対してのエラーである。
なので、トランザクション自体は開始されているので、
一旦ろーるばっくでトランザクションを改めてトランザクションを開始している。
0327nobodyさん
2009/02/23(月) 00:17:43ID:???一旦ろーるばっくでトランザクションを閉じて、改めてトランザクションを開始している。
0328nobodyさん
2009/02/23(月) 00:19:44ID:DYtiHKsNなるほどねー
ようやくわかってきたわぁ
きたわぁ
きたわぁ
0329nobodyさん
2009/02/23(月) 00:22:06ID:DYtiHKsNSQLiteの4つのロックのうち、
すぐにロックを獲得できるのを、
明示的に書かないとだめだな。
$oDbCxn->beginTransaction();
↑これがダメってこと。
なぜなら、↑だと、デフォルトのロックが選択される。
SQLiteにおける、デフォルトのロックとは、defferd lockである。
これだと遅延するから、4つの処理をトランザクションではさみたい、
などという場合には不向き。
0330nobodyさん
2009/02/23(月) 00:29:36ID:???0331nobodyさん
2009/02/23(月) 00:45:25ID:DYtiHKsNやったことある?
0332nobodyさん
2009/02/23(月) 00:58:26ID:DYtiHKsNSQLiteはNFSというファイルシステムを使っているマシンで実行すると
ぶっこわれるらしい。
NFSとはおもにUNIXで使われるファイルシステムらしい。
特にfreeBSDでよく使われるらしい。
自分が借りているレンタルサーバーはfreeBSDなので、
ひょっとしてSQLiteは使えないんじゃないか?
0333nobodyさん
2009/02/23(月) 01:02:31ID:???0334nobodyさん
2009/02/23(月) 01:02:40ID:???>ヒント
>NFSパーティションにマウントされたSQLiteデータベースを処理すること は推奨されません。
>ロックに関してNFSは著しい問題があるので、 データベースを全くオープンすることさえできない可能性があります。
>ま た、成功した場合でも、ロックに関する動作は予測できない結果を生む可 能性があります。
だってさ。こっち調べるのが先じゃない?w
0335nobodyさん
2009/02/23(月) 01:02:48ID:DYtiHKsNdeferred,
immediate,
exclusive
という3つの種類のロックがあるが、
どれを使うべきか?というのは、考えなくていいの?
$dbh->beginTransaction();
これを使うと、自動的に、デフォルトの、ロックが
選択される。SQLiteにおけるデフォルトのロックとは
deferred ロックである。
もし銀行口座などの実装をしたい場合、
exclusiveにしないとダメなのではないか?
また、immediateって、なんのためにあるんだ?
いつ使うんだ?
0336nobodyさん
2009/02/23(月) 01:03:21ID:DYtiHKsNよかった
0337nobodyさん
2009/02/23(月) 01:07:02ID:???0338nobodyさん
2009/02/23(月) 01:07:46ID:???0339nobodyさん
2009/02/23(月) 01:29:03ID:???通報しましたとかsqlite関連で腐るほど書き込んでた
0340nobodyさん
2009/02/23(月) 01:29:11ID:???0342nobodyさん
2009/02/23(月) 01:38:00ID:???WikiもCMSの一種だよ
Wikiが他のCMSと違うのは、不特定多数によるサイト構築を主体とした構成になっている
つかPHP関係ないじゃん
0343nobodyさん
2009/02/23(月) 02:23:27ID:DYtiHKsNsleepしてrollbackだけでいいんじゃないか?
0344nobodyさん
2009/02/23(月) 03:33:25ID:???http://pc11.2ch.net/test/read.cgi/tech/1232712334/284-
0345nobodyさん
2009/02/23(月) 03:44:00ID:???私の趣味は豊富で下記のとおりです。
・アニメ、エロゲ、同人誌、アニソン
・風俗、ストリップ鑑賞
・声優、秋葉系アイドルイベント参加
しかし、これを言うと、おそらくひかれてしまいます。。。
なんて言えばよいのでしょうか?
休みの日は何をしてる?と聞かれても、声優ライブの最前線で
サイリウムをもって、跳んでいるなんて言えません。
0346nobodyさん
2009/02/23(月) 04:39:47ID:cBNbBaFXif(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になる・・
なんで><
0347nobodyさん
2009/02/23(月) 04:40:33ID:cBNbBaFX0348nobodyさん
2009/02/23(月) 04:52:33ID:???http://jp.php.net/preg_match
0349nobodyさん
2009/02/23(月) 05:29:48ID:DYtiHKsNtry {
$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();
}
}
?>
0350nobodyさん
2009/02/23(月) 05:30:39ID:DYtiHKsN実行すると、なんでエラーになるの?
PHP5 + PDO + SQLite3
----------------------------------
database structure
id | name| value
1 | value| 5
-------------------------------
database name = test1
table name= tb1
0351nobodyさん
2009/02/23(月) 05:33:14ID:DYtiHKsN$oDbCxn->query("BEGIN EXCLUSIVE TRANSACTION");
はダメで、
$oDbCxn->beginTransaction();
なら良い、というのはおかしい。
なぜエラーになるの?
0352nobodyさん
2009/02/23(月) 06:48:25ID:c878IibKtest.txt というutf-8のファイルがあって中に文とかphpの変数とかが書いてあります。
これをsjisのtest.phpで読み込み表示させたいのですがincudeだと文字化けします。
どうすれば表示できますか?
0353nobodyさん
2009/02/23(月) 06:59:44ID:???を吐いてやる
0355nobodyさん
2009/02/23(月) 07:20:40ID:cBNbBaFX自分なりに調べてみました><
mb_eregでは !== false でいけたので、それも一緒に比べてみたら
返り値のとこが、
mb_ereg
>正規表現に一致しないか、 エラーを発生した場合に FALSE を返します。
preg_match
>preg_match() は、エラーが発生した場合にFALSEを返します。
でした。
preg_matchは正規表現に一致しないときはfalseを返してくれないので、
!== falseがスルーされたということでよいのでしょうか?><
今まで全部!== falseでできると思っててそれでやってたので変更が大変ですが
preg_matchのときは==とか何もつけないバージョンでやっておきます><
ありがとうございました
0357nobodyさん
2009/02/23(月) 16:02:31ID:???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出るんですが何が原因なんでしょうか・・・
0358357
2009/02/23(月) 16:02:51ID:yJ3BEx4Z■ このスレッドは過去ログ倉庫に格納されています