アカウント名:
パスワード:
「ブラインド」SQLインジェクションって、区別するものなのかな?SQLインジェクションそのものだと思うんだけど。SQLインジェクションの種類わけならそれでもいいと思うんだが、何か別物のように聞こえてしまって/扱っているようで、違和感感じました。
PHPのソーシャルアプリを使っている人間に聞いたら、PDOでPlaceFolderを使ったクエリ作成(prepare使うやつ)は、使わないんだとか。PDOって処理速度が重いので、PV稼がなくてはいけないソーシャルアプリには不適切なんだとか。教科書どおりなら、SQLインジェクション防ぐのはprepare()が有効だと思うんだが・・・
さすがPHPer、期待に違わぬ残念さ。Javaで速度を稼ぐためにPreparedStatementをやめたなんて話は聞いたことがないなあ(検索条件が動的に変化するので使えなかったということはあるけど)。むしろかえってparseが必要な分遅くなるとしか思えないんだけど。実はDBMSがなんちゃってPreparedStatementしか用意されていないMySQLだったなんてオチはないよね。
prepared statement ってクエリキャッシュに載せるために使うものでコネクションプーリングとはあまり関係ないと思ってたんですがあってますかね?「毎回DB接続をオープン、クローズした時のSQL解析」を高速化するためのの物という把握でした。
DBは幾らか分かるんですが、アプリは素人なんで変なコト言ってるかもしれませんけど…。
> 違うなら生SQLの方がはやいですよね??なんで?
そもそもどうしてstatementがキャッシュされることがないなんて非現実的な仮定にこだわるんですか? 性能が重要なサーバじゃなかったの?
毎回コネクションクローズしてたらそのコストがでか過ぎて、preparedだろうとそうでなかろうと大した差がない。
そもそもプーリングがご法度って本当なの?ソース出してくれませんかね?
そういう当てこすりをしたいなら、技術論の場には出てこないほうがいいんじゃないかな。多くは技術的に正しいか正しくないかを論議しようとしてるよね。
#1926755 の論点を洗うと、1. コネクションプーリングはソーシャルアプリ界隈ではご法度2. Prepared Statementを使うとSQLのパースは遅いのではないかの二点になると思うけど、これでいい?
1に関して繋がっているのは #1926785 #1926836 #1927085 で叩きになってるようには見えないけどどうかな。#1926793 の「本当にこれ合ってるの?」に対して反論が出てきてないのが気になる。#1927085 の通りだとするとMySQL特有で、PHP+Pos
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
最初のバージョンは常に打ち捨てられる。
っていうか、これ (スコア:4, 興味深い)
「ブラインド」SQLインジェクションって、区別するものなのかな?SQLインジェクションそのものだと思うんだけど。SQLインジェクションの種類わけならそれでもいいと思うんだが、何か別物のように聞こえてしまって/扱っているようで、違和感感じました。
PHPのソーシャルアプリを使っている人間に聞いたら、PDOでPlaceFolderを使ったクエリ作成(prepare使うやつ)は、使わないんだとか。PDOって処理速度が重いので、PV稼がなくてはいけないソーシャルアプリには不適切なんだとか。教科書どおりなら、SQLインジェクション防ぐのはprepare()が有効だと思うんだが・・・
-- gonta --
"May Macintosh be with you"
Re: (スコア:0)
さすがPHPer、期待に違わぬ残念さ。
Javaで速度を稼ぐためにPreparedStatementをやめたなんて話は聞いたことがないなあ(検索条件が動的に変化するので使えなかったということはあるけど)。むしろかえってparseが必要な分遅くなるとしか思えないんだけど。
実はDBMSがなんちゃってPreparedStatementしか用意されていないMySQLだったなんてオチはないよね。
Re: (スコア:1)
たとえばJAVA屋さんだとDBコネクションをプーリングするのが常識みたいになってますけど、
ソーシャルアプリ業界ではプーリングするのは逆にご法度みたいな部分があったり
ジャンルによってノウハウって違いますからね。
DBあんまり詳しくないんでまちがってたらすいませんけど、毎回DB接続をオープン、クローズしてたらprepared statementでのSQL解析をするぶん速度は落ちるのではないでしょうか?
そういう意味ではPrepare statementやめて生SQL生成してそれ投げるというのはわかる気はしますね。
月間一億PV程度のしょぼいサイト(秒間最大200PVくらい)までしか扱ったことない私はprepare statement使っても問題ないとは思いますが、ソーシャルアプリとか秒間数千から数万のクエリさばく世界ですからね。
中途半端な知識の人間が根拠なしにPreparedStatementをやめたなんていってるとはおもえないんですけど・・・
Re: (スコア:2)
prepared statement ってクエリキャッシュに載せるために使うものでコネクションプーリングとはあまり関係ないと思ってたんですがあってますかね?
「毎回DB接続をオープン、クローズした時のSQL解析」を高速化するためのの物という把握でした。
DBは幾らか分かるんですが、アプリは素人なんで変なコト言ってるかもしれませんけど…。
Re: (スコア:1)
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5374&forum=12 [atmarkit.co.jp]
> PreparedStatementによりプリコンパイルされたSQLは
> コネクションをクローズした後もキャッシュされているのでしょうか?
コネクションクローズしたあともプリコンパイルされたSQLが保持されているということであれば納得です!
違うなら生SQLの方がはやいですよね??
Re: (スコア:0)
> 違うなら生SQLの方がはやいですよね??
なんで?
Re: (スコア:1)
【プリコンパイルあり】
prepared,execute(プリコンパイルされたSQL) 2回通信または2回実行
【プリコンパイルなし】
execute(生SQL) 1回通信または1回実行
だとおもうんですが?ちがいますか?
Re: (スコア:0)
そもそもどうしてstatementがキャッシュされることがないなんて非現実的な仮定にこだわるんですか? 性能が重要なサーバじゃなかったの?
Re: (スコア:1)
ぼくが書いた内容をちゃんと読んでますか?
こだわるってるんじゃなくてわからなくてずっと質問してるんですが・・・
質問してる人間に質問で返すなと・・・
PDOでコネクションクローズしたあとでもstatementがキャッシュにのっているのであればおっしゃるとおりだと思います。
ただ、コネクションクローズしたあとでもstatementのキャッシュがつかえるのかどうかそこがわからんのです。
そしてその部分はだれも教えてくれない・・・
Re: (スコア:0)
毎回コネクションクローズしてたらそのコストがでか過ぎて、
preparedだろうとそうでなかろうと大した差がない。
そもそもプーリングがご法度って本当なの?
ソース出してくれませんかね?
Re: (スコア:0)
Re: (スコア:1)
ソーシャルアプリ界隈って言ったのが癪に障ったのかえらく叩かれてしまいました。
ソーシャルアプリに限らずPHPの高負荷サイトでpconnect使わないのは比較的常識の部類だと思ってたんですけどね(グッドノウハウなのかバッドノウハウなのかはさておいてね)。
それにしても「使う技術によってノウハウは違うよ」って言っただけのつもりだったのに何でこんなに叩かれたんだか・・・
Re: (スコア:0)
そういう当てこすりをしたいなら、技術論の場には出てこないほうがいいんじゃないかな。
多くは技術的に正しいか正しくないかを論議しようとしてるよね。
#1926755 の論点を洗うと、
1. コネクションプーリングはソーシャルアプリ界隈ではご法度
2. Prepared Statementを使うとSQLのパースは遅いのではないか
の二点になると思うけど、これでいい?
1に関して繋がっているのは #1926785 #1926836 #1927085 で叩きになってるようには見えないけどどうかな。
#1926793 の「本当にこれ合ってるの?」に対して反論が出てきてないのが気になる。
#1927085 の通りだとするとMySQL特有で、PHP+Pos
Re:っていうか、これ (スコア:1)
http://srad.jp/security/comments.pl?sid=527293&cid=1926729 [srad.jp]
で、私の意見は「使う技術によってノウハウは違うよね?」「詳細聞かずに残念いっちゃだめだよ」の2点ですよ?
他の発言に関しては質問してる内容を質問でかえされたから私はこう思ってるんだけど違うのかな?って考えをいっただけで議論するつもりはないですよ・・・
そんな議論ができるほど立派なエンジニアではないですから・・・
> 叩きが入っているようには見えないんだがどう?
その後馬鹿馬鹿言われてたので、たたかれたと表現しましたけどね・・・馬鹿とかいわれなければたたかれたとは言いませんよ。それとも馬鹿と相手に対して言い放つのは議論であって叩いてないということでしょうか?