【PHP】下らねぇ質問はここに書き込みやがれ 13

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (アウアウクー MM6f-zbgo)2021/09/09(木) 09:38:43.41ID:eDlF7Xc4M
!extend::vvvvv:1000:512
!extend::vvvvv:1000:512
!extend::vvvvv:1000:512
★スレ立て時 ↑ が3行以上になるようコピペ

PHPに関する質問スレです

前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 12
https://mevius.5ch.net/test/read.cgi/tech/1619667579/

次スレは>>980以降
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured

0952デフォルトの名無しさん (ワッチョイ 6e10-fFoX)2022/08/31(水) 21:04:09.52ID:RpICLcti0
>>950
PHPって同期通信だから、誰かのアクセスが遅延したりするんですか?

>>951
全体を調べなくても、バージョン情報だけ調べれば良いのでは

0953デフォルトの名無しさん (ワッチョイ c95f-WaMk)2022/08/31(水) 22:37:17.82ID:0bu00RjS0
>>952
PHPでも非同期処理できるし、遅延はほとんどなしにできるでしょ

0954デフォルトの名無しさん (ワッチョイ 3d02-Ickp)2022/08/31(水) 23:07:38.07ID:frCvHqxU0
スレ違いのクソレスしか能がない御方には難しすぎるな…

0955デフォルトの名無しさん (ワッチョイ 0263-yNcK)2022/08/31(水) 23:14:07.18ID:2/ZssPvh0
悪意のあるひっかけだったんだ

0956デフォルトの名無しさん (ワッチョイ 6e10-fFoX)2022/09/01(木) 08:27:02.20ID:5Hoki9RX0
>>953
つまり、考え方としては
1)WordPressの公開画面に誰かがアクセスする
2)Ajaxなどで非同期処理して更新チェック
3)更新する必要がある場合は、自動更新

って仕様なんですかね?
であるならば、WordPress以外のPHPアプリでもできそうですね

0957デフォルトの名無しさん (ワッチョイ c95f-WaMk)2022/09/01(木) 10:56:30.21ID:z98R98W20
>>956
Ajaxなんか使わなくてもPHPのexec()だけで非同期処理できる
あとはそんな感じ
もちろん実装の一例で、それ以外の方法もあるだろう

0958デフォルトの名無しさん (ワッチョイ 6e10-fFoX)2022/09/01(木) 22:43:07.28ID:5Hoki9RX0
>>957
わかりました。調べてみます。ありがとうございました。

0959デフォルトの名無しさん (ワッチョイ b1ac-C0nc)2022/09/02(金) 00:01:20.44ID:tq/iSZ/+0
いえいえ

0960デフォルトの名無しさん (ワッチョイ eaa9-Mjbb)2022/09/10(土) 15:24:58.45ID:3OR0LZqv0
pdoとプリアドステートメントというのをやってみたのですが

$stmt = $pdo->prepare("クエリ文");
$stmt->bindValue(・・・)
$stmt->execute();
ここでDBにアクセスしていると思いますが、

行数を数える $stmt->fetchColumn()

foreach ($stmt->fetchAll() as $row) {
を使う時はDBにアクセスしているのでしょうか?

一旦 $result = $stmt->execute();
みたいに結果を変数に入れてから
$result->fetchColumn()
$result->fetchAll()
のような使い方をすればいいのでしょうか?

0961デフォルトの名無しさん (ワッチョイ e6bb-VPVD)2022/09/10(土) 20:11:18.23ID:MysCJx+R0
PDOStatement::execute() の戻り値は成否を表すboolなので
$result = $stmt->execute();
は結果セットの取り出しとは無関係です

:execute()されるとPDOStatement:に結果セットがセットされます
fetch~は結果セットから取り出すメソッドなのでDBアクセスは伴いません

マニュアルを読んで実験してみるよ良いですよ

0962デフォルトの名無しさん (ワッチョイ ea51-AnFa)2022/09/12(月) 12:44:00.88ID:PWuvGxZT0
Symfonyってもう最近使われないですか?
10年前にSymfonyで作られたWebアプリの保守の案件があるのですが

0963デフォルトの名無しさん (ワッチョイ e6bb-VPVD)2022/09/12(月) 12:51:41.95ID:S31S8+BV0
少しは調べろ

0964デフォルトの名無しさん (ワッチョイ ea51-AnFa)2022/09/12(月) 13:07:20.58ID:PWuvGxZT0
>>963
ぐぐっても2006年の資料とか・・・

2019年に最新版は出ているみたいですが、新しい資料じたいがあまり無いゆえ。

0965デフォルトの名無しさん (ワッチョイ e6bb-VPVD)2022/09/12(月) 13:17:36.74ID:S31S8+BV0
wikipedia やそこから辿れる公式すら見てねぇじゃねぇか
エンジニアになりたかったらまずは公式読めるようになれ

0966デフォルトの名無しさん (ワッチョイ eaa9-Mjbb)2022/09/12(月) 14:21:38.34ID:Ynnd8wx/0
>>961
アロー演算子というのに全く慣れていなくて
$stmt->bindValue(・・・)
$stmt->execute();
->を使うと$stmtというのが上書きされていく感じでしょうか?

昔は手続き型を使っていたので
$resultに結果を入れて、あれこれやっていましたが
この -> が変数に代入することなく使えるのが不思議な感じです

もう少しマニュアル読んでみます
https://www.php.net/manual/ja/pdo.prepared-statements.php

0967デフォルトの名無しさん (ワッチョイ a902-+Wio)2022/09/12(月) 23:14:41.96ID:H6EQTEjA0
なんで.じゃダメだったのかなぁ…
中途半端にPerl構文引き継いだせいで面倒なことに…

0968デフォルトの名無しさん (ワッチョイ 1e66-JoGj)2022/09/13(火) 01:04:23.23ID:k/lRopxK0
文字列の連結に使ってるからでしょ。
文字変数と、文字列を返す関数、この2つの項の文字列としての連結と区分けが付かなくなるじゃん。

インスタンス自体も文字列評価可能なんだし。

0969デフォルトの名無しさん (ワッチョイ 157b-hFL5)2022/09/13(火) 01:45:06.58ID:d4v/1ArY0
>>967
-> はC由来で . はPerl由来か?
プログラミング言語とスクリプト言語を中途半端に交ぜたからだね
文字列連結も + のほうが分かりやすいしそうするべきだったかと

0970デフォルトの名無しさん (ワッチョイ 1e66-JoGj)2022/09/13(火) 03:02:48.59ID:k/lRopxK0
アローもドットも:: も全部C++由来では。
C++自体別から引用してるだろけど、
3つか揃い踏みしたトップランクな有名言語はC++だろう。

ポインタ経由、実態経由、クラス経由で記述を分けた。

結局分けないPythonやC#みたいな言語の方が書きやすいという...

0971デフォルトの名無しさん (ワッチョイ 157b-hFL5)2022/09/13(火) 08:20:07.32ID:d4v/1ArY0
>>970
お前がまるで分かってない事だけは分かった

0972デフォルトの名無しさん (ワッチョイ 1e66-OVjx)2022/09/13(火) 11:25:42.23ID:k/lRopxK0
どっか間違ってるの?

0973デフォルトの名無しさん (ワッチョイ ea63-OdF3)2022/09/13(火) 11:44:23.05ID:1xD6R/mV0
ドット演算子はCobolの頃からある

0974デフォルトの名無しさん (ワッチョイ 66f2-JkEp)2022/09/13(火) 11:46:51.82ID:Gwjyu6tY0
変数型宣言がない言語で+で文字連結できちゃうとバグの温床になる

0975デフォルトの名無しさん (ワッチョイ 1e66-OVjx)2022/09/13(火) 11:48:10.80ID:k/lRopxK0
だから、個々は別から引用したかもしれんが、
3つ揃い踏みしたトップランクメジャー言語はと書いてるじゃないか。

0976デフォルトの名無しさん (ワッチョイ ea63-OdF3)2022/09/13(火) 11:49:48.73ID:1xD6R/mV0
あ、ごめん
間違いだ

0977デフォルトの名無しさん (ワッチョイ 157b-hFL5)2022/09/13(火) 12:58:34.49ID:d4v/1ArY0
>>976
COBOLは & らしい。気持ちは分かるが今となっては糞仕様だな。

>>974
それはJSのことを言ってるのか?
ただそれはない。
数値型の変数はほぼ全部のケースで変数名で数値だと明確であり、そこはバグらない。
countやlength、num_of_xxxを文字列で扱う馬鹿はそれ以前の問題だ。

0978デフォルトの名無しさん (ワイーワ2 FF92-pw5f)2022/09/13(火) 13:58:56.46ID:CtcsooHUF
テンプレートリテラル{}使うか.による文字列結合使うかの判断がちゃんと出来ない
今の所ラクな方選んでるだけだな

0979デフォルトの名無しさん (ワッチョイ 7702-okD4)2022/09/17(土) 18:54:08.82ID:X8JZx5Pn0
それでいいわ。強いて言うならエスケープしないで済む方

0980デフォルトの名無しさん (ワッチョイ ff97-W3aP)2022/09/19(月) 12:37:28.97ID:TYV9CYn40
PHPの学習で、トランザクション勉強していますが。
おおざっぱに、「一連のクエリ処理を一つの処理と見立てて、途中失敗したら最初からなかったことにする」
機能かと思います。
で、課題として、簡単なECサイト作っています。
一般の利用者が商品を選択しカートを入れ、お金を払って買い上げるのようなものです。
テーブルは「カート」「商品情報」「利用者」「在庫情報」です。(ほんとは英字です。)
利用者が購入に失敗したら、ロールバックで購入が無かったことにします。
ここで、一連のクエリ処理というのは、「商品を選びカートに入れる」というところから始まるのでしょうか?
「商品を選びカートに入れる」という行為と、「カートにある商品を買う」という行為を
わけて、「カートにある商品を買う」について、トランザクションを設定するものでしょうか?

すいません。意味とおりますかね。。よろしくお願いします。

0981デフォルトの名無しさん (ワッチョイ 9f7c-E+l9)2022/09/19(月) 13:12:25.33ID:9xLKPVoG0
単に最後の購入処理で途中でエラーが発生して整合性が取れない時に
ロールバックするぐらいのイメージで良いのでは?
途中のカートに追加するような処理はそれ単体で失敗すればロールバックかなと
(この場合、カートに追加する処理に失敗したという事でカートは前のまま)

0982デフォルトの名無しさん (スップ Sd3f-Zv9H)2022/09/19(月) 13:18:10.02ID:k2Lhsy4nd
カートに入れるところからトランザクション始めたら買われるまで一連の処理終われないし、途中でタイムアウトするやろw

0983デフォルトの名無しさん (ワッチョイ 9f63-E+l9)2022/09/19(月) 13:19:16.24ID:zeLiCYh20
カートに入れる処理はトランザクション二する必要がない
利用者が自分の意志で取り消すケースもあるわけだし
必要なのは、利用者が決定ボタンを押して、購入完了になるプロセスくらいじゃないかな
一つしかない商品を他の利用者と競合して購入したかもしれないし
複数種類を購入した際に、一つが在庫不足になってたかもしれない
そういうときに、決定ボタンを押す直前までロールバックが必要になる

0984デフォルトの名無しさん (ワッチョイ ffbb-AZvI)2022/09/19(月) 14:16:17.85ID:8Jf173KW0
トランザクションとかセッションとかは文脈で定義される範囲が変わるのでちゃんと意識して書いたほうがいい

その上で、今回はDBのトランザクションのことだとエスパーして回答すると設定される範囲は間違い
記述がないので何をトランザクション処理として設定するかは回答できないけど、「ユーザの決済処理」「在庫処理」あたりがひとまとまりになると思う

入門書で記述されるトランザクションとついでにプリペアドステートメント(プレースホルダ)処理はデータベース側の処理なので入門書から離れてデータベース側の処理をデータベースの公式を参照しながら学習すると良い

0985デフォルトの名無しさん (ワッチョイ ff97-W3aP)2022/09/19(月) 16:01:50.25ID:TYV9CYn40
みなさんありがとうございました。
良くわかりました!

0986デフォルトの名無しさん (ワッチョイ ff97-W3aP)2022/09/20(火) 00:39:07.48ID:Sb2Kpzh+0
phpmyadmin にINT型でUNSIGNED(整数マイナスを除く)に設定したカラムがあります。
直接phpmyadmin上でこのカラムのデータに対して、SQL文でマイナスの値をUPDATEしようとすると

以下のようなアラートが返ってきます。ただし、データは0の値になります。
Warning: #1264 Out of range 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失敗";
}

0987デフォルトの名無しさん (ワッチョイ 9f63-E+l9)2022/09/20(火) 09:09:20.54ID:Sk0Tcp2N0
UPDATE以前二範囲チェックをPHPで行えば?

0988デフォルトの名無しさん (ワッチョイ ffbb-AZvI)2022/09/20(火) 09:18:10.74ID:fhvmpEXe0
試してないけどMySQL側に警告じゃなくてエラーを返すモードがあるみたい
https://dev.mysql.com/doc/refman/8.0/ja/sql-mode.html

TRADITIONAL を有効にすることでエラーを返すようになるみたい

0989デフォルトの名無しさん (ワッチョイ 9701-jQT+)2022/09/20(火) 12:21:17.30ID:F74Rs01Q0
事前チェックが嫌な理由はなんだろ

0990デフォルトの名無しさん (ワッチョイ 9f7c-E+l9)2022/09/20(火) 15:40:51.68ID:r8LO5qc30
普通はバリデーションをしてSQLでエラーにならない値を設定するかなと
SQLでのエラーは想定外の事が起きた場合に限る感じ

0991デフォルトの名無しさん (ワッチョイ ff97-W3aP)2022/09/20(火) 15:44:19.38ID:Sb2Kpzh+0
ありがとうございます。

事前チェックが良いですね。ありがとうございます。

データベースからのエラーを拾いたいのは、
トランザクションのコミットかロールバックの判断を
try-catchで補足しないといけないかと、
勝手に思っていたからです。
(多くの参考書がtry-catch文で判断していたから)

でも、処理毎にエラー文を配列に格納して、
最後の処理の後に、配列の内容の有無を確認して、
トランザクションの判断をすればいいですね。

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

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

0994デフォルトの名無しさん (ワッチョイ ff97-W3aP)2022/09/20(火) 16:20:00.83ID:Sb2Kpzh+0
入力の例外値などは、
トランザクションで判別させるようなものじゃない。
ってことですか?

0995デフォルトの名無しさん (ワッチョイ ff97-W3aP)2022/09/20(火) 16:27:13.11ID:Sb2Kpzh+0
トランザクションの判別は、何か想定外の問題が起きた時であって、
想定されるような問題は事前になんとかしとけということかな。

0996デフォルトの名無しさん (ワッチョイ 9f63-E+l9)2022/09/20(火) 16:33:06.67ID:Sk0Tcp2N0
トランザクションで判定しないと行けないのは、
リソースの取り合いがあるときやDB自身の障害など
DB側でしか分からないようなケースだな

0997デフォルトの名無しさん (ワッチョイ ff97-W3aP)2022/09/20(火) 16:36:01.02ID:Sb2Kpzh+0
ありがとうございます。
ということは、トランザクションは、
try-catch文で例外判断するのが一般的なのですね。

0998デフォルトの名無しさん (ワッチョイ 97da-E+l9)2022/09/20(火) 23:33:16.97ID:k4MHQr8J0
クラスのファイル名の拡張子に .inc を使うのは
今の時代では許されてないの?
許されるなら .inc を使い続けたい

0999デフォルトの名無しさん (ワッチョイ 9fb7-ldZd)2022/09/21(水) 00:13:56.09ID:9N/hP2WI0
次スレ立ってた
【PHP】下らねぇ質問はここに書き込みやがれ 14
https://mevius.5ch.net/test/read.cgi/tech/1663659983/


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

1000デフォルトの名無しさん (ワッチョイ 97da-E+l9)2022/09/21(水) 13:48:44.07ID:kTmMqKR00
>>999
PSR-0を読んで、そういや .incはダメって書いてねーな・・・ と思ったので聞いてみました!

1000なら許される

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

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。