回答(全7件)
ベストアンサー
回答の評価を上げる
以下のような回答は評価を上げましょう。
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
11
この機能は開放されていません
評価を下げる条件を満たしてません
憶測も交えながらの回答となります。
機能面の問題
他の回答者様も言及してますが、
まずは機能面の問題が考えられます。
- バインドメカニズムが利用できない(プリペアドステートメント非対応)
- トランザクション機能が標準実装されていない(コマンドを投げれば不可能ではないですが・・・)
- ストアドプロシージャを扱えない
- MySQL5.1以降に導入された主要な機能が扱えない
- オブジェクト指向非対応
などなど機能面の不足がありますが、
特に1つ目のバインドメカニズムが利用できないのはセキュリティ上致命的です。
そこはtakepieeeさんの掲示されているリンク先などが参考になると思います。
バインドメカニズムが利用できないと自前でエスケープをかけてあげる必要がでてきますので、その面でも不便となります。
開発状況の問題
m6uさんの掲示されているPHP公式マニュアルにも記載されていますが、MySQL系のモジュールのうち、
のみMySQL APIはVer5.xでは保守サポートのみ、Ver7.xからは保守も終了しています。
そんな状況のモジュールを、
PHP公式として利用できる状態のまま放置する方がまずいという考えもあるように思います。
(公式が廃止を決めたから保守を止めたという可能性もありますが)
オブジェクト指向の導入上の問題
これは完全に憶測ですが、
MySQL APIの方の改修が滞ったのには、
PHPがオブジェクト指向をサポートを取り入れた流れを受けての影響もあるかなと思います。
PHP3.0以前から導入されていたライブラリにオブジェクト指向の機能を随時リリースするより、
新しいライブラリとしてオブジェクト指向のサポートを進めた方が開発・管理上の都合の良さがあったのではないでしょうか。
既存のライブラリを触って、
デグレさせるのはご法度という状況、
かつオブジェクト指向という方向性の異なる実装をサポートするよう回収するのは容易とは到底思えませんので。
それもありPHPのVer5.0を迎える時まで、じっくりライブラリ開発を進めていたのではないのかなと勝手に想像しています。
長々と書いてきましたが、
あっている確証はないのでこんな考え方もあるんだなという参考程度に。
2016/12/20 22:00 投稿
回答の評価を上げる
以下のような回答は評価を上げましょう。
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
6
この機能は開放されていません
評価を下げる条件を満たしてません
セキュリティ的なものだったと思います。
文字コード指定set_namesが危険、プレースホルダが使えない等です。
SQLインジェクション対策は勉強されているのであれば熟読したほうがいいと思います。
基準はIPAが作っていますので、参考までに。
安全なウェブサイトの作り方
http://www.ipa.go.jp/security/vuln/websecurity.html
安全なSQLの呼び出し方
http://www.ipa.go.jp/files/000017320.pdf
もし間違っていたらごめんなさい。
2016/12/20 19:02 投稿
回答の評価を上げる
以下のような回答は評価を上げましょう。
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
3
この機能は開放されていません
評価を下げる条件を満たしてません
PHP: どの API を使うか - Manual
http://php.net/manual/ja/mysqlinfo.api.choosing.php
……にある機能比較表がわかりやすいです。
PHP: Overview - Manual
http://php.net/manual/ja/mysqli.overview.php
The mysqli extension has a number of benefits, the key enhancements over the mysql extension being:
Object-oriented interface
Support for Prepared Statements
Support for Multiple Statements
Support for Transactions
Enhanced debugging capabilities
Embedded server support
サーバーサイドのプリペアドステートメントが使えるようになった、ストアドプロシージャをサポートした、複数ステートメントを一度に実行できるようになった、トランザクションに対応してロールバック/コミットできるようになった、MySQL 5.1移行の新機能に対応している、オブジェクト指向で開発できる、などなど。
2016/12/20 19:09 投稿
回答の評価を上げる
以下のような回答は評価を上げましょう。
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
3
この機能は開放されていません
評価を下げる条件を満たしてません
単純に新バージョンのMySQLに対応したmysqliを作ったからです。
PHPは後方互換を重視する文化で、
RFCというページを作って過半数の賛同を得られないと実装出来ません。
参考URL: PHP7の内部実装から学ぶ性能改善テクニック - @hnw氏
実際にRFCを見ましたが書いてないですね…
なのでなぜmysqli関数を作って乗り換えたのかという直接的な理由は分かりません。
ただ、その背景にそのような文化があり、mysqlモジュールを破壊的な改修して対応させるよりも、
mysqliという新モジュールを定義して乗り換えるようにアナウンスしたという経緯があると推測されます。
2016/12/21 14:00 投稿
回答の評価を上げる
以下のような回答は評価を上げましょう。
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
2
この機能は開放されていません
評価を下げる条件を満たしてません
個人的な見解ですが
アプリケーションとコアレベルで連携をすると、アプリ側がバージョンアップしたときに
プログラム側が汎用性を保ったまま吸収することができないからではないかと。
多少パフォーマンスを犠牲にしても汎用性を保つためにPDOが利用されるのもその流れかと。
2016/12/20 20:47 投稿
回答の評価を上げる
以下のような回答は評価を上げましょう。
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
1
この機能は開放されていません
評価を下げる条件を満たしてません
セキュリティ上 バインドメカニズム,プレースホルダーが有用といきなり言われてもと感じている場合だけ参考にしてください。
たとえば
SELECT カラム,... FROM テーブル名 WHERE カラム=' (ユーザ入力値)';
を実行するシステムを想像してください。
ここで、(ユーザ入力値)を悪意をなして、「1';DROP TABLE テーブル名; SELECT '」
を入力したとします。
そうすると、もしも、入力値を何もチェックしていないと、
SELECT カラム,... FROM テーブル名 WHERE カラム='1’;
DROP TABLE テーブル名;
SELECT '’;
の3個のSQLをが実行されてしまします。
そういう意味で、自動的に複数のSQLになったりすることを防止するメカニズムが
プログラムの記述いかんにかかわらず行われる副作用が、バインドメカニズムやプレースホルダや
に組み込まれているので、より安全性が高いと言うことができます。
2016/12/27 19:32 投稿
回答の評価を上げる
以下のような回答は評価を上げましょう。
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
1
この機能は開放されていません
評価を下げる条件を満たしてません
mysqlモジュールをPHP5.5から非推奨にした際の議論が下記URLで確認できます。
上記URL「Why?」の内容を読む限り、他の方も挙げられているようなセキュリティの問題や、コードベースが古すぎてメンテナンスが大変すぎる、などが主なところのようですね。
PHP同梱ではなくなってPECLモジュールに格下げになったのは、メジャーバージョンアップのタイミングに合わせて整理したということでしょう。mysqlに限らず、十分なメンテナンスができていないようなモジュールはマイナーバージョンアップでいったん非推奨とし、次のメジャーバージョンアップで本体から外すのが最近の流れのようです。下記URLも合わせてご確認ください。
2016/12/29 16:26 投稿
15分調べてもわからないことは、teratailで質問しよう!
92.29%
関連した質問
-
受付中
PHP Mysql・mysqliの選択について質問です
Mysqlとmysqliは、どちらがよいと思いますか? 
どちらを使用したほうがいいでしょうか? 
 
理由も一緒にお願いします。 
 
パフォーマンス面だけではなくて、ほかの特徴
-
解決済
質問が古くなり改めての質問、ラジオボタンで選択したレコードをHP上からDELETEできない件、お願い...
質問が古くなりましたので改めて質問いたします。 
HP上からDBに登録したレコードを削除しようと以下の手順で記述してみましたが、最後がif(flag){elseの結果になってしまい
-
解決済
PHPとmysqlを勉強しているプログラミング初心者です。
完全プログラミング初心者です。
気になる事があります。

データベース(test)の中にテーブルが2つ(user)(posts)がある場合でご質問させて下さい。
---------
-
解決済
小計を合計する記述を教えてください。
ショッピングカートのプログラムを組み、自動メール送信システムを途中まで。以下の通りに組みました。
<?php

try
{
require_once('../common/comm
同じタグがついた質問を見る
-
PHP
9876questions
PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。
-
SQL
978questions
SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。