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を表示させること。 ・解決しなくても回答をもらった場合はお礼を言うこと。 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。) ◆回答者への注意 ・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
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}} をしたいんですけど、ブラウザを終了するとセッションまで破棄されてしまいます。 ご教授お願いいたします。
370 名前:nobodyさん [2009/02/23(月) 22:06:30 ID:cBNbBaFX] >>366 sql文に直接変数入れる方法でしました。できました。 ありがとうございました >>367 ,368 やってみたのですが、反応としては356とほぼ同じでした マニュアルのパラメータ一覧のものをいろいろ代えてやってみたのですが どうもうまくいきませんでした。
371 名前:nobodyさん mailto:sage [2009/02/23(月) 22:12:39 ID:???] >>369 セッションはブラウザを終了すると破棄されるものです 継続したいならクッキーを使うといいよ
372 名前:nobodyさん mailto:sage [2009/02/23(月) 22:28:00 ID:???] >>370 そのいろいろかえてやってみた、の中に正解が入ってないわけだな。 ビット和はとったのか。まぁ、いいや。メンドクセ
373 名前:nobodyさん [2009/02/23(月) 22:55:40 ID:DYtiHKsN] なぜEXCLUSIVEはトランザクション開始直後に ジャーナルファイルを作成しないのか?
374 名前:nobodyさん mailto:sage [2009/02/23(月) 22:59:36 ID:???] アホか
375 名前:369 mailto:sage [2009/02/23(月) 23:03:42 ID:???] >>371 PHPSESSIDをクッキーに格納する仕様と勘違いしてました。 ありがとうございました。
376 名前:nobodyさん [2009/02/24(火) 00:24:39 ID:r/vu3Jnx] ∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ <ココまでアホばかり 彡、 |∪| / / __ ヽノ / (___) /
377 名前:nobodyさん mailto:sage [2009/02/24(火) 07:08:35 ID:???] pdoで急にinsertできなくなった・・ エラーなしで何事もなく終わってるのに肝心のinsertだけできていない・・