私自身の意見
PDO
データベースへの接続に1 年以上使用していMSSQL
ますが、これまでのところまったく問題はありません。
mssql_*
実際、私はに移行する前にこれらの関数の使用方法を調べたところ、これらの関数は信頼性がはるかに低く、言うまでもなく安全でないデータベースPDO
への接続方法であるという結論に達しました。MSSQL
論理的に
論理的な観点からは、からにPDO
変更するためにコードを少し調整するだけでよいため、 も優れたオプションです。MSSQL
MySQL
これらのデータベースへの接続を非常に簡単にする PDO クラスのラッパー クラスを作成しました。
これを例として考えてみましょう:
<?php
// +------------------------------------------------------------------------+
// | class.mssql.php |
// +------------------------------------------------------------------------+
// | Copyright (c) Company Ltd 2013. All rights reserved. |
// | Version 1.0 |
// | Last modified 30/01/2013 |
// | Email email@company.co.uk |
// | Web http://www.company.co.uk |
// +------------------------------------------------------------------------+
// Make sure the SQL class is included
require_once("class.sql.php");
/*
* Class mssql
*
* @version 1.0
* @author Ben Carey <email@company.co.uk>
* @copyright Company Ltd
*
*/
class mssql extends sql{
/**
* Initialize the object and set/reset all variables
*
* This function is called when the object is constructed
*
* @access private
*/
function __construct(&$memcache){
// Call the sql construct
parent::__construct($memcache);
// Global MsSQL defaults
$this->query_escaper_left = "[";
$this->query_escaper_right = "]";
$this->connection_engine = "sqlsrv";
$this->connection_parameter_host = "server";
$this->connection_parameter_database = "Database";
$this->select_db_function = "db_name()";
}
}
?>
固有のものMSSQL
はすべてこの拡張で定義され、親クラスに渡されclass.sql.php
ます。PDO の優れた点は、class.sql.php
任意のデータベース (または、これまでに試したすべてのデータベース) で動作するために、ファイル内のコードを変更する必要がないことです。
したがって、ここで必要なのは、各データベース タイプの小さな拡張機能だけであり、機能します。
一方、ネイティブmssql_*
関数では、何らかの理由でデータベースを変更する場合、すべてを書き直す必要があります。mysql_*
言うまでもなく、関数が現在非推奨であることを考えると、PDO for MySQL を使用する必要があります。
PDO での私のテスト
私は複雑なストアド プロシージャを実行しておりINPUT PARAMETERS
、1 億以上のレコードを含むデータベースで、、、を使用していますOUTPUT PARAMETERS
。INOUT PARAMETERS
これらは完全に完璧に機能し、引き続き機能します。
参考文献
関数を使用しないもう 1 つの理由はmssql_*
、PHP バージョン 5.3 以降の Windows ではサポートされなくなったことです。
ここを見る
SyBase 拡張機能は、mssql_*
関数と同じカテゴリに分類されます。それらは手続き的で非実用的で、移植性がまったくありません!
機能性
一見すると、これらの拡張機能のどれも関数と同等の機能を持っていないことに気付きましたmysql_real_escape_string()
。一方、PDOでは、これは必要ありません
結論
言うまでもなく、私は道徳的な PDO サポーターです (これは、1 年間使用してからのことです!)。それは、関数に関する他の人の意見に耳を傾けないということではありmssql_*
ません。私を説得するのは非常に難しいだけであり、ほとんどの人は、これらの関数が PDO と競合することさえできると思います。
結論として、私の意見では、PDO は次の主な理由から進むべき道です。
- 非常に移植性が高く、最小限のコードで異なるデータベースに簡単に切り替えることができます
- のような機能を必要とせずに安全です
mysql_real_escape_string()
- 開発者にとっては急速に標準になりつつあります
- オブジェクト指向プログラミングの経験がない場合、入門として最適です。
- ほとんどのPHPパッケージにプリインストールされています
- ストアド プロシージャを含む複雑なクエリを簡単に実行できます。
- 古い非推奨関数に対して MySQL データベースでベンチマークした後、
mysql_*
すべてではないにしても、多くの場合で高速であることが証明されました。-ここを参照
少し前に同様の質問をしましたが、同じ結論が導き出されました。
こちらをご覧ください