PHP質問・雑談スレ【初心者お断り(ROM歓迎)】©5ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん 転載ダメ©2ch.net
2016/04/22(金) 08:58:11.47ID:???初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、
難しい質問や話題をしなければいけないわけではありません。
PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。
PHP未導入の方や、手取り足取りが必要な初心者の方はくだスレへどうぞ。
【PHP】下らねぇ質問はここに書き込みやがれ 4
http://echo.2ch.net/test/read.cgi/tech/1457792733/
その他リンク
・PHPマニュアル
https://secure.php.net/manual/ja/index.php
・コードテスト・貼り付け用
http://ideone.com/
・プログラミングのお題スレ Part8 (求PHPer参戦)
http://echo.2ch.net/test/read.cgi/tech/1444216746/
このスレで扱う話題
・PHPのコード,設定や設定値に関する質問
・常識的範囲内でのコードレビュー依頼・改良相談
・PECL,PEARに関する質問
・PHP新機能やPHP関連トレンドの話題
(FWや非公式ライブラリの話題や特徴比較は良いが使い方から先の話題は専スレへ)
・PHPのバグ発見報告・公式に報告する前の検証依頼
このスレで扱わない話題
・直接関係ない○○特有の質問(専スレへ)
(HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
・PHPの改造
0760nobodyさん
2016/10/08(土) 15:49:06.96ID:???0761nobodyさん
2016/10/08(土) 15:56:07.39ID:???これは自分1人でしか開発したことがねぇやつが言う言葉だろ。
0762nobodyさん
2016/10/08(土) 17:36:47.26ID:???自分がDBに入れる前にエスケープするのはSQLインジェクションを防ぐためと念のためってだけ
人間どこでミスするかわからんし
もちろん表示の時だけエスケープした方が良いってのはその通りだが
結局ちゃんとユーザー側で動いていれば良いしそれが正義だと思ってる
逆にそれで何かあった時の方が怖くないか?
個人情報漏れとかね
0763nobodyさん
2016/10/08(土) 19:51:23.91ID:???入力をストレージに保存する際に表示形式に合わせた「変換」を行うとデータの再利用性が失われる
0764nobodyさん
2016/10/08(土) 21:31:42.94ID:???もちろんその通り防ぐ「べき」
しかし現実にPDOはIN句が使えなかったりして複雑な処理しなきゃいけなかったり、重くなったりする
そういうことを考えると入れる時にエスケープしておくのが安全かと自分は考えている
そういうリスクを負ってでもデータの再利用性を重視したいという人は表示の時のみエスケープすれば良いんじゃないかな
0765nobodyさん
2016/10/08(土) 21:42:28.25ID:???これがそもそも間違ってると思う。
そもそも、何人かちらほらデータベースに入れる「前」にエスケープした方が安全みたいな論調が
あるが、エスケープを「前」にしようが「後」にしようが、人間ミスすることには変わりないし、
最終的には>>759で書いたようにレビューしてテストするしかないのに。
なんで勝手にデータベースに入れる前にエスケープした方が「安全」だと思ってるのか?
「前」だろうが「後」だろうが安全性は変わらん。最終的にはレビューとテストで安全性を担保にするしかないのに。
何を根拠に「前」の方が安全っていってるのか理解しかねる。
0766nobodyさん
2016/10/08(土) 21:45:57.17ID:???そりゃ入る時は一度しかないけど取り出すのは理論上無限にあるからでしょ
回数考えれば一度と無限じゃ手間が全然違う
0767nobodyさん
2016/10/08(土) 21:51:03.04ID:???もちろん、入れるのと取り出すのは取り出す方が多いのは統計的にもそうだろう。
0768nobodyさん
2016/10/08(土) 22:04:49.87ID:???根本的にエスケープがどういうものかを分かってない。
XSS脆弱性埋め込むよりはマシだろというのは、
ポスターが剥がれるよりいいだろって言いながら4辺をガムテープ貼りする概念だ。
エスケープはターゲットに出力する時、都合が悪い物にだけする。
teratailあたりをずっと眺めてればわかるけど、
二重エスケープでHTMLタグが表示されてることが何度もあった。
エスケープをどのように扱うべきか、ちゃんと分かってない奴が作ってるからそうなるのさ。
見た目なんかどうでもいい、って人はまぁ、たしかにとにかく最初にエスケープしちゃえばいいよ。
メンテナンスする人が君のことを呪うだろうけど。
0769nobodyさん
2016/10/08(土) 22:17:21.41ID:???>エスケープはターゲットに出力する時、都合が悪い物にだけする。
これは別に、選択的にエスケープしろ、という意味じゃないよ。
普通のテンプレートエンジンが使っているであろうhtmlspecialchars()というメソッドが、
勝手にどれをエスケープすべきかは判断してくれるので、
グラマとしては「マズいものが有りそうな物を出力する時にだけ」かたっぱしからかけろ、
という意味ね。
>>748のSQLに関するプレースホルダについては
ちゃんとプレースホルダを使っているのであれば、それはエスケープですらない。
クエリをプリペアしてあるので、そこに当てはめる値についてはエスケープする必要がまったくないんだ。
SQLについてエスケープする必要があるのは、全部テキストでSQLを投げる場合。
0770nobodyさん
2016/10/08(土) 22:28:21.64ID:???>そりゃ入る時は一度しかないけど取り出すのは理論上無限にあるからでしょ
>回数考えれば一度と無限じゃ手間が全然違う
無限に処理をするのは君じゃなくてコンピュータだからね。そんな数を比べても意味ないよ。
君がすることは、出力の時に都合が悪い物をエスケープしてくれる処理を
1つの出力(PHPだとページと等価かな)について1回コードを書くだけ。
それで、メジャーなテンプレートエンジンは、その処理を勝手にやってくれる。
(Smartyがダメなのは、そのエスケープ処理がデフォルトではやらないようになっていること
Twigが優れているのはデフォルトがエスケープ処理をする設定になっていること)
エスケープに要する時間はピリオドの後0が2つの後に数字がくるくらいかな。だから気にしなくていいよ。
0771nobodyさん
2016/10/08(土) 22:29:55.02ID:???安全性は最高だし、特定の関数に依存する変換処理にならないし
0772nobodyさん
2016/10/08(土) 22:31:38.53ID:???上の方でずっとあっちのスレと俺を目の敵にしてた君じゃないかな?
君はまだまだダメだ。もうちょっと勉強し、経験を積み、頭を使いなさい。
0773nobodyさん
2016/10/08(土) 22:36:55.26ID:???それ、特定文字だけエスケープするのと何もかわんないよ、きっと。
DBに突っ込んだ内容をメールで送りますってなったら、
する処理、二つの場合で変わるかい?
DBに突っ込んだ内容を画面に表示しますってなったら、
する処理、二つの場合で変わるかい?
これは変わりそうだね。
なぜなら、文字コード表記を戻してJavaScriptを含んだHTMLが再現され、
見事にXSSが発動するはずだからだ。
そしたら、よけいめんどくさんじゃないかい?
0774nobodyさん
2016/10/08(土) 22:49:38.60ID:???>しかし現実にPDOはIN句が使えなかったりして複雑な処理しなきゃいけなかったり、重くなったりする
使えないなんてことは絶対にないし、
君が「複雑だ」と感じるのは、単純に君の技術がまだまだ低すぎるから。
たぶん、コードをベタ書きしているレベルってことだろう。
もうちょっと頭を使いなさい。
IN句の重さについては、
DBにもよるが、普通の利用において問題になるほどほど重くなることは通常無い。
気になるとしたら、設計上の問題が大きい。
IN句の中に書く要素数は仕様によって決まるものだからプログラムだけではいかんともしがたい場合もある。
確かに昔のMySQLなんかはIN句がやたら重かったからね。
それから、大抵のDBではSQLの1文に書ける文字数の上限があるので(それでもかなりの文字数はかける)
IN句で表現しようとすると、その文字数を超える場合もでてくる。
そういう意味で、IN句ではなく別の実装にしておこう、というケースはよくある。
0775nobodyさん
2016/10/08(土) 22:57:41.06ID:???>「入力でサニタイズ」することが大間違いなのだが、そう言ってしまうと、 「一般的に言われている“正しい”対策」と言ったことと矛盾してしまうため、 「サニタイズ自体は誤りでない」ことにして辻褄を合わせようとする。
>その結果、「サニタイズは誤り」という本当のことを書けなくなり、「SQL文 を組み立てているすべての個所でサニタイジングする」と言わざるを得なくなっ ている。
>こうやって「サニタイズ」の用法は節操なく拡大されてきた。そして、誤解す る者をいつまでも残す結果となった。
0776nobodyさん
2016/10/08(土) 22:59:13.78ID:???0777nobodyさん
2016/10/08(土) 23:01:31.18ID:???XSS対策用のエスケープと
SQLインジェクション対策用のエスケープを
ごっちゃにしている人がいるみたいだから、ちゃんと区別しような。
ごっちゃにして解説している本とかもいっぱいあるけど。
0778nobodyさん
2016/10/08(土) 23:05:46.92ID:???どこからの引用かわからないけど、その通りだね。
トンデモ解説なテキトーな書籍が沢山出版された事が元凶なんだろう。
誰が言っていたか忘れたけど、
「出来るやつは実行する。出来ないやつが教える」って事なんだろう。
0779nobodyさん
2016/10/08(土) 23:11:41.51ID:???>>762 : nobodyさん2016/10/08(土) 17:36:47.26 ID:???
>久々に盛り上がってるねw
>自分がDBに入れる前にエスケープするのはSQLインジェクションを防ぐためと念のためってだけ
>人間どこでミスするかわからんし
君は、
>久々に盛り上がってるねw
こんな余裕をかましている場合じゃないほど、物事をわかっていないんだ。
0780nobodyさん
2016/10/08(土) 23:17:32.21ID:???俺は困らないし。
0783nobodyさん
2016/10/08(土) 23:23:42.03ID:???複雑って程でもないけどそれなりに面倒だよ
IN句をそのまま使えた方が良い
それ以前にIN句をそのまま使えないPDOがクソと言えばクソだが
0784nobodyさん
2016/10/08(土) 23:23:42.62ID:???ちょっとだけ補足
>「入力でサニタイズ」することが大間違いなのだが
ここだけ、間違いね。
フォームで期待されている値以外を排除するための「入力でのサニタイズ」
つまり、本当の意味でのサニタイズは絶対に必要だよ。
その後に書くプログラムの量と複雑さに関わってくるからね。
まず、仕様で定められている値にサニタイズする。これが鉄則。
これが出来ていないプログラムが実に多すぎるのが残業だらけのクソ業界に繋がっている。
このサニタイズの際には不必要な改行コードやNullバイトも必ず削除しておくこと。
これも、ちゃんとやっているシステムを見たことが無い。
そのせいでphpmyadminの古いバージョンではNullバイト攻撃による任意のPHPコード実行が可能な脆弱性があって、
アホみたいな話だけど、PHPの方でこの脆弱性を修正した。
0785nobodyさん
2016/10/08(土) 23:24:50.82ID:???現実にやってるか言ってるんだけど、
君がやり方を分からないって可能性を、なぜ排除した?
この短い時間で。
0786nobodyさん
2016/10/08(土) 23:26:10.85ID:???>やったことあればわかるしちょっと調べればわかること
よし、じゃあ、その調べたソースを見せてみてくれ。
添削してあげるから。
何度も言うけど、君は技術力も知能も低すぎるんだ。
自覚しないと前に進めないよ。
0787nobodyさん
2016/10/08(土) 23:27:46.57ID:???クソなのは、君の脳
ちょっと、「どうして複雑だと思うか」を分かるように、コード書いて見せてごらん。
教えてあげるから。
0788nobodyさん
2016/10/08(土) 23:30:45.67ID:???なんでこっちが見せなきゃいけないんだw
自分で仮想サーバーなりなんなりでPDO使ってIN句入れて実行してみれば良いだろw
そのままじゃ動かないから
IN句のやつをorでやればできるけど
0790nobodyさん
2016/10/08(土) 23:35:02.65ID:???>なんでこっちが見せなきゃいけないんだw
上の方読んでもまだわからないの?
君がアホすぎるから、今の君のアホな脳内をみせてくれないと
どこが間違っているのか教えられないよ、ってこと。
「PDOではIN句が使えない」なんて、猿でも言わないよ。
PDOってのはただの抽象化レイヤーでしかないからね。
>自分で仮想サーバーなりなんなりでPDO使ってIN句入れて実行してみれば良いだろw
だから実際に使っているから言っているんだよってさっきも言ったよね。
君さ、毎回毎回草生やしてるけど、そんな余裕ないほど自分がアホの子なんだってそろそろ気付こうよ。
0791nobodyさん
2016/10/08(土) 23:38:49.31ID:???きみ、アホ君かな?
まず、XSS脆弱性とSQLインジェクション脆弱性の違いを理解しよう。
君が全く理解できていないことは、この文章のバカさ加減を見ればすぐにわかる。
>では聞くがDBにエスケープしてデータ入れて困る時って具体的にどんなケースなの?
答えを書いてあげようか?
DBに「なんらかのエスケープされたデータ」を入れた事「自体」で困ることはない。
だが、その取扱において困るケースは沢山有る。
君は「DBにエスケープしてデータ入れて」と書いたが、
このエスケープとは、何に対するエスケープか?
それを理解しない限り、君は相変わらずネアンデルタール人以下のままだ。
0792nobodyさん
2016/10/08(土) 23:39:36.84ID:???サルでも言わないんだw
ここでは言ってるけど
http://tips.recatnap.info/wiki/PDO%E3%81%A7where%E5%8F%A5%E3%81%AE%E3%80%8Cin%E3%80%8D%E3%82%92%E4%BD%BF%E3%81%86
0793nobodyさん
2016/10/08(土) 23:44:44.66ID:???何に対するエスケープかと言えば主にXSSと次にSQLインジェクションだよ
XSSはポストから不正なコードを埋め込まれる脆弱性でSQLインジェクションは不正なコードによりSQLを実行されることだ
自分1人なら出力時に完全にエスケープできるとしても他の奴がもしやらずに出力したらどうするんだ?
実際に脆弱性突かれてるケースがあるというのに
んでその取扱いにおいて困るケースってのは「具体的」にどんなケースなの?
3つくらいで良いから教えてよ
0794nobodyさん
2016/10/08(土) 23:46:26.67ID:???君、本当に、どこまでバカなのかな?
どうしてそれを見て「使えない」と思ったの?
ちょっと説明してみてくれる。
君、思ってた以上に頭が悪いようだな。
あと、
>ここでは言ってるけど
この人誰? なんか有名な人なの?
全然知らない人が書いた、意図も分からないペラのページ見て
「PDOではIN句が使えない」と思い込んじゃう君の脳みその構造がよくわかんないな。
0795nobodyさん
2016/10/08(土) 23:49:14.53ID:???いや実際にPDOでそのままIN句は実行できないわけだが?
可能ならPDOでIN句そのまま使いたいから使える方法教えてくれよw
0796nobodyさん
2016/10/08(土) 23:50:51.44ID:???>何に対するエスケープかと言えば主にXSSと次にSQLインジェクションだよ
君はさ、その二つが別の物だとわかっているのに、
一つの文章の中で「エスケープはどうする」って語るんだ。
君が頭おかしいところの一つはそこ。
>自分1人なら出力時に完全にエスケープできるとしても
>他の奴がもしやらずに出力したらどうするんだ?
>その取扱いにおいて困るケースってのは「具体的」にどんなケースなの?
>3つくらいで良いから教えてよ
・君一人なら、DBに入っているデータは「ある形式でエスケープされている」とわかるとしても
他の奴が「その形式でエスケープされている」って事をとくていするにはどうするんだ?
・上の方のteratailの項参照
・上の方のメール送信の項参照
3つだね。これでいいかな?
0797nobodyさん
2016/10/08(土) 23:53:08.85ID:???いい加減馬鹿みたいに草生やすのやめたら?
君はそんなことシている余裕ない子だよ?
>可能ならPDOでIN句そのまま使いたいから使える方法教えてくれよw
ちょっとさ、君が想定している、その「そのまま使う」って言う状態が
どういう状態か説明しみなよ。
そうしないと、君、一生アホのままだよ?
0798nobodyさん
2016/10/08(土) 23:55:13.03ID:???あとさ、
>>748 : nobodyさん2016/10/08(土) 14:11:23.10 ID:???
> >>747
>PDOでプレースホルダも使ってるけど
>念には念を入れてだよ
これ、君だよね?
自分で何言ってるかよく考えてからレスしてね。
0799nobodyさん
2016/10/08(土) 23:55:17.92ID:???>君一人なら、DBに入っているデータは「ある形式でエスケープされている」とわかるとしても
>他の奴が「その形式でエスケープされている」って事をとくていするにはどうするんだ?
そんなの注意事項ファイルに記載しておくかINSERTしてるソース見ればわかるだろ
百歩譲って出力時だけエスケープすれば良いとしてもアホな奴がプリペアードステートメントや
プレースホルダ使用しなかったり出力時にエスケープ処理しないで問題が起きたらどうするんだ?
個人情報抜かれたりした後じゃ遅いだろ
0800nobodyさん
2016/10/08(土) 23:57:05.68ID:???そのまま使うというのはIN句をSQL平文そのまま使うという意味だ
もちろん他の部分はPDOのプリペアードやプレースホルダ使用でな
0801nobodyさん
2016/10/09(日) 00:01:51.77ID:???> >>797
> そのまま使うというのはIN句をSQL平文そのまま使うという意味だ
> もちろん他の部分はPDOのプリペアードやプレースホルダ使用でな
なんでそんなアホなことしたいのかは置いとくとして、
そうしたいならそうすればいいじゃん。
思いっきり脆弱性の危険性を埋め込むことになって
これまでの知ったかぶりな君の発言を全部否定することになるけど、
そうすればいいじゃないか。
どうして出来ないと思うの?
君、本当にアホの子だね。
0802nobodyさん
2016/10/09(日) 00:04:52.21ID:???つまり君は、エスケープの意味も、何故しなければいけないのかも、
プレースホルダの意味も、何故存在するのかも、
クエリをプリペアするというのがどういうことかも、
何故プリペアするのかも全く分かっていないのに
これまで十数レスに渡って、さも分かっているような顔をして草生やしてたわけだ。
救いようがない感じかな、どうやら。
0803nobodyさん
2016/10/09(日) 00:12:55.86ID:???> そんなの注意事項ファイルに記載しておくかINSERTしてるソース見ればわかるだろ
IN句生成が複雑だなんていってる程度の君のクソコードはみんな、読みたくなんかないって。
> 百歩譲って出力時だけエスケープすれば良いとしてもアホな奴がプリペアードステートメントや
> プレースホルダ使用しなかったり出力時にエスケープ処理しないで問題が起きたらどうするんだ?
> 個人情報抜かれたりした後じゃ遅いだろ
ほら、またごっちゃにしだした。何回言ったら理解できるのかな?
今君が話した「出力時」ってどの、何を出力を想定した? それがプリペアードステートメントと本当に関係があったかい?
> 個人情報抜かれたりした後じゃ遅いだろ
君がそんな重要なシステム開発に関われているとは到底思えないなぁ。
これまでの君の発言を読んでみればそれは誰にでも分かることだが、
君にもわかるように教えてあげるね。
「クリティカルな開発の現場においては、DBアクセスは抽象化されたライブラリを利用し、
そのライブラリがSQLインジェクション脆弱性対策を担保している
そうした方が、君みたいなアホが考えたオレオレアクセスを使うよりも遥かに安全だと言うことが分かりきっているからだ」
勿論、そのライブラリを使わずに君みたいな智識の無いバカが勝手なアクセスをすれば脆弱性が埋め込まれることになるが、
規定されているライブラリを使っていないことは、コードを見ればひと目でわかる。
それから繰り返し、もう一度言うけど、
XSS脆弱性対策とSQLインジェクション対策はまったく別の物だから
いい加減区別して考えられるようになれ、野猿。
0804nobodyさん
2016/10/09(日) 00:19:55.67ID:???>>800 名前:nobodyさん :2016/10/08(土) 23:57:05.68 ID:???
> >>797
> そのまま使うというのはIN句をSQL平文そのまま使うという意味だ
> もちろん他の部分はPDOのプリペアードやプレースホルダ使用でな
そういう状態を
>>748 : nobodyさん2016/10/08(土) 14:11:23.10 ID:???
> >>747
>PDOでプレースホルダも使ってるけど
>念には念を入れてだよ
とは表現しねーんだよ、マヌケ! 使ってる意味ね〜だろーが!
いい加減に知ったかぶりで乗り切ろうとするのはやめろ。
0805nobodyさん
2016/10/09(日) 00:25:18.48ID:???XSSとSQLインジェクション対策が別物ということなどわかっている
問題は他人がselect系の作業を行う可能性があるということだ
0806nobodyさん
2016/10/09(日) 00:30:13.81ID:???データをストアする際に表示形式を考えて加工するというのはモデルがビューの領域を侵犯してることに他ならない
モデルがビューを侵犯する以上MVCが全て密結合にならざるを得ない
したがって一般にストア時に表示形式を前提とした「加工」を行う設計は「悪い」設計だと言わざるを得ない
0807nobodyさん
2016/10/09(日) 00:47:53.24ID:???仕様理解してればどうってことないんだけどね
一昔前は情報も少なかったけど最近は多いしちょっとググれば出てくるよ
WHERE `id` IN (:hoge)
bind(":hoge", [1,2,3,4], INT) //1のみ有効
bind(":hoge", "1,2,3,4", INT) //1のみ有効
bind(":hoge", "1,2,3,4", STR) //無効
WHERE `id` IN (:hage, :hige, :huge, :hege)
bind(":hage", 1, INT)
bind(":hige", 2, INT)
bind(":huge", 3, INT)
bind(":hege", 4, INT)
0808nobodyさん
2016/10/09(日) 00:51:32.31ID:???$parameters = array();
$parameters[] = 123;
$parameters[] = 456;
$parameters[] = 789;
$sql =
0809nobodyさん
2016/10/09(日) 00:53:05.43ID:???PDOでINするときって
$parameters = array();
$parameters[] = 123;
$parameters[] = 456;
$parameters[] = 789;
$sql = ”SELECT 〜〜 FROM 〜〜 WHERE column_name IN (”;
foreach ($parameters as $index => $parameter) {
if ($index > 0) { $sql .= ’,’; }
$sql .= ’?’;
}
$statement = $db->prepare($sql);
foreach ($parameters as $parameter) {
$statement->bind($parameter);
}
$statement->execute();
俺はこれでやってるんだけど、もっといい方法あったら教えてくれー。
「できない」派の人は、これはPDOライブラリの機能ではなくソースで対応してることだから「できない」って意見なのかな?
0810nobodyさん
2016/10/09(日) 00:54:37.98ID:???不特定多数の値をINに入れたいときの書き方、という意図です。
たとえばフォームのチェックボックスに好きなだけチェックして送れるとかの。
0811nobodyさん
2016/10/09(日) 10:00:44.52ID:???> bind(":hoge", "1,2,3,4", INT) //1のみ有効
> bind(":hoge", "1,2,3,4", STR) //無効
これはそれぞれの値をintやstringにキャストした時のやつってことかな?
(int)[] = 0
(int)[1000] = 1
(int)"1,2,3" = 1
(string)[1,2,3] = "Array"
"1,2,3,4"がだめなのは"1,2,3,4"というidと認識されてるからって感じで
0812nobodyさん
2016/10/09(日) 11:34:44.96ID:???0813nobodyさん
2016/10/09(日) 16:47:21.63ID:???> >>803
>XSSとSQLインジェクション対策が別物ということなどわかっている
わかってるなら何で区別して書かねーんだ、マヌケ。
お前のくだらん言い訳は聞き飽きた。
> 問題は他人がselect系の作業を行う可能性があるということだ
SELECT系だけが問題だと思ってるアホがプレースホルダを語るな、バカ。
本当にお前は、もう、3年ROMれ。
お前位みたいなバカが「PHPのPDOはIN句が使えない」とか
わかった風なフリして書き込むだけで、本当に迷惑なんだよ。
分かってないなら「わからないので教えてください」っていう体で書け。
そのぐらいの“人”としての振る舞いもわかららないからデルタールだって言ってんだ。
0814nobodyさん
2016/10/09(日) 17:07:33.97ID:???えっとね、コードが汚いから他の人がメンテしずらい。
特に、ここがダメ
$sql = ”SELECT 〜〜 FROM 〜〜 WHERE column_name IN (”;
foreach ($parameters as $index => $parameter) {
if ($index > 0) { $sql .= ’,’; }
$sql .= ’?’;
}
もし、この流儀に沿って治すとしたら
$in_section = "";
if(count($parameters) > 0){
$holders = array();
for($i=0; $i<count($parameters); $i++){
$holders[] = "?";
}
$in_section = " WHERE column_name IN (" . implode(", ", $holders) . ")";
}
$sql = "SELECT 〜〜 FROM 〜〜{$in_section}";
こんな感じ。精査はしてないから雰囲気だけ分かってくれれば。
0815nobodyさん
2016/10/09(日) 17:07:58.33ID:???ただし、向こうでも言ったけど、プレースホルダに ? 使ってるやつはいい加減頭が古すぎる。
名前付きプレースホルダを使うようにしよう。
例えば
SELECT ~~ FROM ~~ WHERE hoge = ? AND hage = ? AND moge = ? muge = ? AND boke = ? AND sage = ?;
$params = array("guri", "gura", "muga", "boga", "daga", "riga");
というコードがあるとして、moge = ? の後に pubya = "papa"を挿入したい場合、
bindするパラメターのどこにpapaを挿入したら良いのか、一目でわかるかい?
実際のシステムは、バインドパラメターが10個以上になるケースも珍しくない。
そんなとき、いちいち数を数えるのは拷問でしかない。
名前付きプレースホルダを使うシステムなら順番を考慮する必要なくbind出来るから、
? なんていうノータリンが考えたソリューションは使うべきではない。
0816nobodyさん
2016/10/09(日) 17:16:17.26ID:???IN句の場合数がもの凄く多い時もあると思うがそういう時名前のbind使いたい時は
ループで数字足していって名前作るということ?
0817nobodyさん
2016/10/09(日) 17:37:13.95ID:???そういうこと。それは別にIN句に限ったことじゃない。
普通のWHERE句とかでも同様。
こんな感じ
SELECT ~~ FROM ~~ WHERE moge = :moge AND mage = :mage AND boke IN (:boke1, :boke2, :boke3);
$bind = array(
"moge" => "もげ",
"mage" => "まげ",
"boke1" => "ぼけ1",
"boke2" => "ぼけ2",
"boke3" => "ぼけ3"
);
>>816なら作り方は説明しなくても分かるよね?
これについて、おさるサンの>>792が紹介している方法でbindする。
これなら後で別の要素を追加するにしても、順番なんか全く考慮しなくていいだろう?
こんな簡単なことなんだよ。難しくもなんともない。
なのに、こういう事を紹介している本もサイトもまったくない。
世の中、本当にバカしかいないんだなって思うよ。
0818nobodyさん
2016/10/09(日) 18:18:06.51ID:???貴方やたら人格攻撃や否定してるけどそういうの職場ではやってないよな?
相手もやる気なくなって職場の雰囲気悪くなるから指摘する点だけ話せよ
0819nobodyさん
2016/10/09(日) 18:21:37.49ID:???お前が誰だかわからんけど、
そんなどうでもいいこと指摘してる暇があったら、もっと勉強して技術磨け。
それがこの分野で金をもらうための最低条件だ。
人格攻撃? おまえ、本当にバカだろう。
おれは一度も人格攻撃なんてしていない。
おれがしてきたのは、
認識がおかしい場合と、
人としての振る舞いがおかしい場合だ。
もし、俺が人格攻撃をしていると思う箇所があるなら例示してみろ。
0820nobodyさん
2016/10/09(日) 18:27:52.80ID:???この業界2人以上で作業することがほとんどなんだからどうでも良くはない
自分のことを言ってるのではなくて貴方のことを話している。自分の間違いは認められないタイプか?
勉強するなんてのは当然のことだ
0821nobodyさん
2016/10/09(日) 18:33:46.95ID:???まーたさるかに合戦やってんのかー
0822nobodyさん
2016/10/09(日) 18:51:58.56ID:???一人でやる分には問題ないけど
0823nobodyさん
2016/10/09(日) 19:37:14.78ID:???>勉強するなんてのは当然のことだ
全く勉強しないのに、さもわかったような顔して適当な智識をひけらかし、
間違いを指摘されてもヘラヘラ笑って「なんで俺が俺の考え方を提供しなきゃいけないんだよ」
と、言い放つバカと
>この業界2人以上で作業することがほとんどなんだからどうでも良くはない
一緒に仕事をしたいと思うやつは居ないし、もし一緒に仕事をすることになったら
そいつをやめさせるか、自分が職場を変える。
簡単なことだな。おまえ、アホだろう?
0824nobodyさん
2016/10/09(日) 19:38:46.53ID:???> いくら技術があっても共同で作業しにくい奴は士気を下げて全対の生産性も下がるからいらないんだよ
> 一人でやる分には問題ないけど
お前の、「共同で作業しやすい奴」というのは、お前の事を手とり足取り教えてくれる奴の事か?
そんなのは、お前の母親以外に居ないということを、そろそろ理解しような? ノータリン
0825nobodyさん
2016/10/09(日) 19:41:10.15ID:???> いくら技術があっても共同で作業しにくい奴は士気を下げて全対の生産性も下がるからいらないんだよ
まぁ、技術力が無いやつほどそう言うな。
相対的に自分の地位が下がってリストラ対象になるからな。
0826nobodyさん
2016/10/09(日) 19:47:37.07ID:???おまえが雑魚そうなのは、底辺しかいなさそうな2chで底辺ばっかに
吠えまくってることなんだよ。下ばっか見てるやつなんて大した事ねぇんだよ。
本当にできるやつは上しか見てねぇんだよ。
本当にすごいならすごいやつがいっぱいそうなところで吠えてこいよwwwwwww
0827nobodyさん
2016/10/09(日) 19:49:31.94ID:???>もし、俺が人格攻撃をしていると思う箇所があるなら例示してみろ。
には何も答えないのな。同一人物か?
0828nobodyさん
2016/10/09(日) 19:52:50.18ID:???>下ばっか見てるやつなんて大した事ねぇんだよ。
おー、自分が下だって事だけは理解できたのか。髪の毛分くらい少しだけ成長したな。
>本当にすごいならすごいやつがいっぱいそうなところで吠えてこいよwwwwwww
うん、俺、全然すごくないから別に上で吠えたいと思わないな。
君は吠えたいんだ、自分が凄いって。若いっていいねぇ。
君はずっと、この底辺の場所で全く見当違いな「俺凄い!」宣言を吠えまくってきたけどな。
そんな事しても全く意味ないって自分でわかってるのにしてるんだ。
君、本当にバカだねぇ。
0829nobodyさん
2016/10/09(日) 19:54:29.20ID:???本当によく言い当てているよね。
0830nobodyさん
2016/10/09(日) 19:57:23.39ID:???「底辺しかいなさそうな2ch」とは言ったが、自分は一言も底辺といってなのに、
妄想で「おー、自分が下だって事だけは理解できたのか」と勝手に解釈。
読解力もなさすぎで会話にすらならねぇwwww
0831nobodyさん
2016/10/09(日) 19:59:17.83ID:???話進まねぇし。めんどくせぇんだけどwww
0832nobodyさん
2016/10/09(日) 20:13:08.15ID:???おまえ、どうしてそう、自分の都合の良いところばっかりみるの?
> おまえが雑魚そうなのは、底辺しかいなさそうな2chで「底辺ばっかに」
> 吠えまくってることなんだよ。
お前がお前の言うところの「底辺」だから「お前だけ」に吠えてきたわけさ。
お前はそれを自覚したんじゃないのか?
まだ気づかないのか? おまえ、本当にあっちでもこっちでも、最底辺だぞ。
>>831
上の流れよく見てみろよ。俺が事前に何度もヒント出してるのに
それに全く気づかずにバカ返答ばっかりして話が進まなくなってたんだぞ。
気づいてなかったのか?
本当にお前はどうしようもないな。もう、霊長類のカテゴリーからも外したほうがよさそうだ。
0833nobodyさん
2016/10/09(日) 20:15:01.38ID:???前にちょっとだけ言ったけど、やっぱり正しかったようだ。
お前の頭につまってるのはカニ味噌だな。
越前ガニ君にしようか、こんどから。
0834nobodyさん
2016/10/09(日) 20:16:27.41ID:???>>それに全く気づかずにバカ返答ばっかりして話が進まなくなってたんだぞ。
知るかよボケ。それは俺がやったわけじゃねぇんだから俺に言うんじゃねぇよ。
それに、他人のせいで話が進まなくなったからっておまえも同じ事してるなら
同類だわ。
そんぐらいわかれカス。
0835nobodyさん
2016/10/09(日) 20:17:39.08ID:???で、下だけで吠えるんだwww
ただのカスじゃん。
0836nobodyさん
2016/10/09(日) 20:18:34.13ID:???それと、越前ガニ君さ、
なんで毎回2、3行しか文章書けないの?
どうせ、2,3行しか読むこともできてないでしょ?
なんか端末的な問題でもあるの?
それともやっぱりカニ味噌的な問題なのかな?
0837nobodyさん
2016/10/09(日) 20:19:40.70ID:???俺がカスかどうかはどうでもいいけど、
と、いうことは、吠えられてる君は「自分自身がカスである」という事が導き出せたわけだ。
実に結構。
0838nobodyさん
2016/10/09(日) 20:20:51.32ID:???>どうせ、2,3行しか読むこともできてないでしょ?
そんな理由もわからないんだ??ww
やっぱただの馬鹿だな。
理由を教えてあげよっか??
馬鹿に長文書いても無駄。
みんな知ってるよwww
0839nobodyさん
2016/10/09(日) 20:22:26.02ID:???> >俺が事前に何度もヒント出してるのに
> >それに全く気づかずにバカ返答ばっかりして話が進まなくなってたんだぞ。
>知るかよボケ。それは俺がやったわけじゃねぇんだから俺に言うんじゃねぇよ。
カニ味噌、ちゃんとはたらいてるかなー?
ヒントを出してるのに理解せずにバカ返答したのは
君だよって話をしてるんだよ?
まぁ、理解できなかったからバカ返答してるわけで、
こういっても分かるわけないよね。
2,3行しかよめないから、過去に遡って内容を読み返すなんて、
無理だもんね、カニ味噌じゃ。
0840nobodyさん
2016/10/09(日) 20:23:57.74ID:???> 理由を教えてあげよっか??
> 馬鹿に長文書いても無駄。
> みんな知ってるよwww
そうだね。
俺が丁寧に長い文章で説明してあげてるのに
君、全く意味がわかってないもんね、いつも。
みんな、それ、わかってるよね、確かに。
0842nobodyさん
2016/10/09(日) 20:25:55.51ID:???カニ味噌脳の仕組みがよくわかるように。
---------------------------------------------------------------
>>800 名前:nobodyさん :2016/10/08(土) 23:57:05.68 ID:???
> >>797
> そのまま使うというのはIN句をSQL平文そのまま使うという意味だ
> もちろん他の部分はPDOのプリペアードやプレースホルダ使用でな
そういう状態を
>>748 : nobodyさん2016/10/08(土) 14:11:23.10 ID:???
> >>747
>PDOでプレースホルダも使ってるけど
>念には念を入れてだよ
とは表現しねーんだよ、マヌケ! 使ってる意味ね〜だろーが!
いい加減に知ったかぶりで乗り切ろうとするのはやめろ。
---------------------------------------------------------------
0843nobodyさん
2016/10/09(日) 20:26:29.33ID:???0844nobodyさん
2016/10/09(日) 20:28:03.22ID:???本当にどうしようもなくて、口だけだなーってよく分かる結果だよね。
0846nobodyさん
2016/10/09(日) 20:42:42.91ID:???誰もが「馬鹿」だと思う人の特徴はこんな人だ。わかりやすいね。
ttps://www.google.co.jp/search?q=%E3%82%AA%E3%82%A6%E3%83%A0%E8%BF%94%E3%81%97+%E9%A6%AC%E9%B9%BF&oq=%E3%82%AA%E3%82%A6%E3%83%A0%E8%BF%94%E3%81%97%E3%80%80%E9%A6%AC%E9%B9%BF&aqs=chrome..69i57j69i61.4295j0j1&sourceid=chrome&ie=UTF-8
0847nobodyさん
2016/10/09(日) 20:47:00.06ID:???論理では全く太刀打ちできなくなって全く関係のない話を持ち出して延々と食い下がってくるけど、
そんなことしていて、楽しいのかな?
そういう事態になったときには既に思考力も完全に停止していて、
全くそれまでの話の内容を考慮せずにひたすらこちらを批判することに徹する。
今まで自分がしてきた馬鹿な発言なんて、全く無かったことにできる厚顔無恥さには
ほんとうにいつも驚かされるばかりだ。
厚顔というか、睾丸で物を考えているんだろう。
0850nobodyさん
2016/10/09(日) 23:14:14.54ID:???コンピューターは人格否定などしないんだから事実だけを淡々と指摘しようや
君らは余計なことばかり考えてるしPC以下なのかな?
0851nobodyさん
2016/10/10(月) 01:22:34.73ID:???0852nobodyさん
2016/10/10(月) 08:08:53.73ID:???0853nobodyさん
2016/10/10(月) 09:20:25.86ID:???これ作ったサルはやってるらしいよ
脆弱性だらけだろうな
https://agearea.com/
0854nobodyさん
2016/10/10(月) 10:43:49.87ID:???少なくとも職場にいたら研修会を開かなきゃならないと考える
IN句に対するarrayのバインドについては, それがPDOStatementクラスの仕事であるべきかを考えた方がよい
どう考えてもPDOをラップするようなクエリビルダーとかの仕事の範疇だ
0855nobodyさん
2016/10/10(月) 11:14:11.30ID:???出力時のみXSS対策エスケープした方が良いなんてちょっとPHPやってる奴ならわかってるんじゃないか?
勉強って程でもない
色んな事情で入力時にやりましたってだけで
0858nobodyさん
2016/10/10(月) 13:55:07.23ID:???0859nobodyさん
2016/10/10(月) 14:09:18.16ID:???https://www.ssllabs.com/ssltest/analyze.html?d=agearea.com
PHP側調べるのは面倒だからTLS周り
■ このスレッドは過去ログ倉庫に格納されています