【PHP】下らねぇ質問はここに書き込みやがれ 13at TECH
【PHP】下らねぇ質問はここに書き込みやがれ 13 - 暇つぶし2ch1025:デフォルトの名無しさん
22/09/19 13:19:16.24 zeLiCYh20.net
カートに入れる処理はトランザクション二する必要がない
利用者が自分の意志で取り消すケースもあるわけだし
必要なのは、利用者が決定ボタンを押して、購入完了になるプロセスくらいじゃないかな
一つしかない商品を他の利用者と競合して購入したかもしれないし
複数種類を購入した際に、一つが在庫不足になってたかもしれない
そういうときに、決定ボタンを押す直前までロールバックが必要になる

1026:デフォルトの名無しさん
22/09/19 14:16:17.85 8Jf173KW0.net
トランザクションとかセッションとかは文脈で定義される範囲が変わるのでちゃんと意識して書いたほうがいい
その上で、今回はDBのトランザクションのことだとエスパーして回答すると設定される範囲は間違い
記述がないので何をトランザクション処理として設定するかは回答できないけど、「ユーザの決済処理」「在庫処理」あたりがひとまとまりになると思う
入門書で記述されるトランザクションとついでにプリペアドステートメント(プレースホルダ)処理はデータベース側の処理なので入門書から離れてデータベース側の処理をデータベースの公式を参照しながら学習すると良い

1027:デフォルトの名無しさん
22/09/19 16:01:50.25 TYV9CYn40.net
みなさんありがとうございました。
良くわかりました!

1028:デフォルトの名無しさん
22/09/20 00:39:07.48 Sb2Kpzh+0.net
phpmyadmin にINT型でUNSIGNED(整数マイナスを除く)に設定したカラムがあります。
直接phpmyadmin上でこのカラムのデータに対して、SQL文でマイナスの値をUPDATEしようとすると
以下のようなアラートが返ってきます。ただし、データは0の値になります。
Warning: #1264 Out of range


1029: value for column 'test_int' at row 7 phpから、PDO接続で同じようにUPDATEしたとき、エラーとさせて入力を拒否したいのですが方法がありますでしょうか? try-catch文で、以下のようにしたものの、ただ値が0になるだけしかなりませんでした。 良いアイデアがあれば教えてください。 $a =-100; try { $ps = $db->prepare("UPDATE tb2 SET test_int = :a WHERE nam = 'タヌキ'"); $ps->bindParam(":a", $a); $ps->execute(); echo "UPDATE成功"; } catch (RangeException $e){ echo "UPDATE失敗"; }



1030:デフォルトの名無しさん
22/09/20 09:09:20.54 Sk0Tcp2N0.net
UPDATE以前二範囲チェックをPHPで行えば?

1031:デフォルトの名無しさん
22/09/20 09:18:10.74 fhvmpEXe0.net
試してないけどMySQL側に警告じゃなくてエラーを返すモードがあるみたい
URLリンク(dev.mysql.com)
TRADITIONAL を有効にすることでエラーを返すようになるみたい

1032:デフォルトの名無しさん
22/09/20 12:21:17.30 F74Rs01Q0.net
事前チェックが嫌な理由はなんだろ

1033:デフォルトの名無しさん
22/09/20 15:40:51.68 r8LO5qc30.net
普通はバリデーションをしてSQLでエラーにならない値を設定するかなと
SQLでのエラーは想定外の事が起きた場合に限る感じ

1034:デフォルトの名無しさん
22/09/20 15:44:19.38 Sb2Kpzh+0.net
ありがとうございます。
事前チェックが良いですね。ありがとうございます。
データベースからのエラーを拾いたいのは、
トランザクションのコミットかロールバックの判断を
try-catchで補足しないといけないかと、
勝手に思っていたからです。
(多くの参考書がtry-catch文で判断していたから)
でも、処理毎にエラー文を配列に格納して、
最後の処理の後に、配列の内容の有無を確認して、
トランザクションの判断をすればいいですね。

1035:デフォルトの名無しさん
22/09/20 15:59:12.72 Sk0Tcp2N0.net
トランザクション処理でその様なエラーを拾わせるって
まずくね?
たぶん、クライアントから受け取ったデータだと思うし、
それって単独で許容値かどうかを判断出来ると思うんだよ
Web画面経由なら、クライアント画面にエラー表示させて
再入力を促せると思うんだ
そうすればどう言うエラーか判断する必要もないよね

1036:デフォルトの名無しさん
22/09/20 15:59:16.45 r8LO5qc30.net
バリデーション
 問題があればここでエラーを返し下の処理はしない
try{
トランザクション開始
SQL実行
コミット
}catch(Exception e) {
ロールバック
DBでエラーが発生した事を返す
}
正常終了

1037:デフォルトの名無しさん
22/09/20 16:20:00.83 Sb2Kpzh+0.net
入力の例外値などは、
トランザクションで判別させるようなものじゃない。
ってことですか?

1038:デフォルトの名無しさん
22/09/20 16:27:13.11 Sb2Kpzh+0.net
トランザクションの判別は、何か想定外の問題が起きた時であって、
想定されるような問題は事前になんとかしとけということかな。

1039:デフォルトの名無しさん
22/09/20 16:33:06.67 Sk0Tcp2N0.net
トランザクションで判定しないと行けないのは、
リソースの取り合いがあるときやDB自身の障害など
DB側でしか分からないようなケースだな

1040:デフォルトの名無しさん
22/09/20 16:36:01.02 Sb2Kpzh+0.net
ありがとうございます。
ということは、トランザクションは、
try-catch文で例外判断するのが一般的なのですね。

1041:デフォルトの名無しさん (ワッチョイ 97da-E+l9)
[ここ壊れてます] .net
クラスのファイル名の拡張子に .inc を使うのは
今の時代では許されてないの?
許されるなら .inc を使い続けたい

1042:デフォルトの名無しさん
22/09/21 00:13:56.09 9N/hP2WI0.net
次スレ立ってた
【PHP】下らねぇ質問はここに書き込みやがれ 14
スレリンク(tech板)

>>1003
まずはPSR-0や4を調べてもらって、その上でincにしたいと言うなら
個人の趣味開発くらいなら自由にしたら良いと思う

1043:デフォルトの名無しさん
22/09/21 13:48:44.07 kTmMqKR00.net
>>1004
PSR-0を読んで、そういや .incはダメって書いてねーな・・・ と思ったので聞いてみました!
1000なら許される

1044:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 377日 4時間 10分 1秒

1045:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch