目次
1. PHP データベースドライバーの紹介
2. PHP でデータベースに接続するさまざまな方法
1. PHP データベースドライバーの紹介
ドライバーは、特定の種類のデータベース サーバーと対話するように設計されたソフトウェア コードの一部です。ドライバーはいくつかのライブラリを呼び出す場合があります。 Javaのデータベースドライバーの概念に似ています
コードをコピー
1.JDBC-ODPC ブリッジ:
JDBC API を ODPC API にマッピングします。次に、JDBC-ODPC にデータベースのローカル ドライバー コード (つまり、データベース メーカーが提供するデータベース操作バイナリ コード ライブラリ (Oracle の oci.dll など)) を呼び出します
2. ローカル API ドライバー
JDBC API をデータベース固有のクライアント API に直接マッピングします。つまり、データベース メーカーが提供するローカル コード ライブラリ (C/C++ など) をクライアント経由でロードします
3. ネットワークプロトコルドライバー (メインストリーム)
このタイプのドライバーは、クライアントにネットワーク API を提供します。クライアント上の JDBC ドライバーは、ソケット (ソケット) を使用してサーバー上のミドルウェア プログラムを呼び出し、そのリクエストを必要な特定の API 呼び出しに変換します。
4. ローカルプロトコルドライバー (メインストリーム)
このタイプのドライバーは、ソケットを使用してクライアントとデータベースの間で直接通信します。データベースインスタンスと直接対話するJDBCです
このドライバーは、データベースで使用される基盤となるプロトコルを認識しており、現在使用されている最も主流の JDBC ドライバーでもあります。
コードをコピー
PHP の場合、ネットワーク プロトコル ドライバーとローカル プロトコル ドライバー、つまり MySQL クライアント ライブラリと MySQL ネイティブ ドライバー ライブラリも一般的に使用されます。 これらのライブラリは、MySQL データベース サーバーと対話するための低レベル プロトコルを実装します。
データベース ドライバーは、PHP とデータベース間の通信の最下層にあり、さまざまなデータベース ベンダーが、特定のデータベースの基本機能と高度な機能を提供するために、特定のフレームワークに基づいて独自のドライバーを実装します。
ドライバー層の最上位には、PHP コードとデータベースを接続するために使用される「コネクター」またはアダプター抽象化層があり、プログラマは PDO (PHP データベース オブジェクト) を使用するか、拡張インターフェイス (mysql、mysqli) を直接使用してこれらを公開できます。出てくるAPIは基盤となるデータベースと通信します。
データベース製造元によって提供される基盤となるデータベースドライバー
mysql: http://www.mysql.com/products/connector/
オラクル: http://www.oracle.com/technetwork/indexes/downloads/index.html#database
SQLサーバー: http://msdn.microsoft.com/zh-cn/library/cc296170(SQL.90).aspx
...
ファイルデータベース
File はファイルベースのデータベース エンジンであり、ファイル I/O (入出力) 関数を使用して、ディスク上のファイルにデータベースを保存したり、ファイルからデータベースを読み取ります。一般に、リレーショナル データベース (Mysql など) (一般的なファイル データベースなど) よりもはるかに小さいです
SQLite コマンド ライン バージョンのサイズは 200 KB 未満です) 同時に、ファイル データベースは使い慣れた SQL コマンドのほとんどをサポートしており、持ち運びが簡単です。
次に、上記の全体像から始めて、PHP がデータベースに接続するさまざまな方法と、さまざまなビジネス シナリオにおけるメリットとデメリットを 1 つずつ学びましょう
2. PHP でデータベースに接続するさまざまな方法
0x1: 拡張 API インターフェースを使用してデータベースと通信します
PHP コードは、コアと、コア機能を形成するいくつかのオプションの拡張機能で構成されます。 mysqli や mysql などの PHP の MySQL 関連の拡張機能はすべて、PHP 拡張機能フレームワークに基づいて実装されています。
拡張機能の典型的な機能は、API を PHP プログラマーに公開し、プログラマーが拡張機能を使用できるようにすることです。もちろん、PHP 拡張フレームワークに基づいて開発され、API インターフェイスを PHP プログラマに公開しない拡張機能もいくつかあります。たとえば、PDO MySQL ドライバー拡張機能は API インターフェイスを PHP プログラマーに公開しませんが、その上の PDO レイヤーへのインターフェイスを提供します。
PHP 拡張機能の作成については別のブログ投稿を参照してください
http://www.cnblogs.com/LittleHann/p/3562259.html
実際のプログラミングではAPIを拡張してデータベースに接続する方法が最もよく使われます
拡張子=php_mysql.dll
これは、PHP アプリケーションが MySQL データベースと対話できるように設計および開発された初期の拡張機能です。 mysql 拡張機能はプロシージャ指向のインターフェイスを提供し、MySQL 4.1.3 以前向けに設計されています。したがって、この拡張機能は MySQL 4.1.3 以降のデータベース サーバーと対話できますが、それ以降の MySQL サーバーが提供する一部の機能はサポートしません
mysql 拡張機能のソース コードは、PHP 拡張機能ディレクトリ ext/mysql にあります
コードをコピー
// データベースに接続して選択します
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') または die('接続できませんでした: ' .mysql_error());
echo '接続に成功しました';
mysql_select_db('my_database') または die('データベースを選択できませんでした');
// SQL を実行します
$query = 'SELECT * FROM my_table';
$result = mysql_query($query) または die('クエリが失敗しました: ' . mysql_error());
// HTML 打印查询结結果
echo "<テーブル>n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
{
echo "t
n";
foreach ($line を $col_value として)
{
echo "tt
$col_value n";
}
echo "t
n";
}
echo "n";
// 释放结果集
mysql_free_result($result);
// 关闭连接
mysql_close($link);
?>
复制幣
拡張子=php_mysqli.dll
mysqli 拡張は、MySQL 拡張拡張と呼ばれており、MySQL4.1.3 または更新バージョンの新しい高レベルの機能を使用するために使用できます。mysqli 拡張は、PHP 5 以降のバージョンに含まれています。
mysqli扩展には一連の特典があり、mysql扩展の優先順位は次のとおりです:
复制幣
1. 面向对象インターフェース
2.準備された语サポート句(即パラメータ処理、有効な防御SQL注入の発生)
3. 多语句执行サポート
4. 事応援
5. 強化された调试能力
6. 嵌入式服务サポート
7.
オブジェクトへのインターフェイスが提供されると同時に、プロセスへのインターフェイスも提供されます。
复制幣
mysqli 展は PHP 展フレームを使用して構築されており、PHP ソースコード目录下の ext/mysqli 内にあるソースコードです
复制幣
$con = new mysqli("localhost", "root", "111", "php4fun_");
/* 接続を確認します */
if (mysqli_connect_errno())
{
printf("接続失敗: %sn", mysqli_connect_error());
exit();
}
$sql = "name = ? および pass = ? であるユーザーから名前を選択します。";
$cmd = $con->prepare($sql);
$name = $_GET['name'];
$pass = $_GET['pass'];
// SQL クエリにパラメータを追加します
$cmd->bind_param("ss", $name, $pass);
$cmd->execute();
$cmd->bind_result($result);
$cmd->fetch();
if($result)
{
var_dump($result);
}
?>
复制幣
mysqli除は、パラメータの承認処理を使用してデータ通信を実行でき、同時に面方向のコード化方式の使用もサポートします
复制幣
終了
}
/* クエリをサーバーに送信します クエリリクエストをサーバーに送信します*/
if ($result = mysqli_query($link, 'SELECT * from p8_ad_user'))
{
print("非常に大きな都市は次のとおりです: ");
/* クエリの結果をフェッチする クエリの結果を返す */
while( $row = mysqli_fetch_assoc($result) )
printf("%s (%s) ", $row['Name'], $row['Population']);
}
/* 結果セットを破棄し、結果セットに使用されていたメモリを解放する クエリを終了してメモリを解放する */
mysqli_free_result($result);
}
/* 接続を閉じます 接続を閉じます*/
mysqli_close($link);
?>
コードをコピー
PHP は、関数呼び出しの仕様に従っている限り、他の多くのデータベース接続拡張機能もサポートしています。詳細については、
を参照してください。
http://www.php.net/manual/zh/refs.database.php
0x2: PDO 抽象化レイヤーを使用してデータベースと通信します
PDO (PHP Data Object PHP Database Object) は、PHP アプリケーションのデータベース抽象化レイヤー仕様です。 PDO は、PHP アプリケーションが接続するデータベース サーバー システムの特定の種類を気にしないようにするための統合 API インターフェイスを提供します。つまり、PDO の API を使用すると、PHP コードを少し変更するだけで、必要に応じていつでもデータベース サーバー (Firebird から MySQL など) をシームレスに切り替えることができます。
データベース抽象化レイヤーの他の例には、Java アプリケーションの JDBC や Perl の DBI などがあります。
注: PDO 拡張機能を使用するだけではデータベース関数を実装できません。データベース サービスにアクセスするには、特定のデータベースの PDO ドライバーを使用する必要があります (これは単なるインターフェイスの仕様です)
その一方で、インターフェースが提供する互換性が強ければ強いほど、そのカスタマイズ性と特異性は弱まります (これは簡単に理解できます)。PDO インターフェース API の主な欠点は、MySQL サーバーの使用が制限されることです。 . すべての高度なデータベース機能。たとえば、PDO では、MySQL でサポートされている複数ステートメントの実行を使用できません。
PHP5 では、PDO は現在多数のデータベースをサポートしており、PHP6 ではデフォルトのデータベース接続方法になります:
1.スクライト
2.mysql
3.pgsql
4.mssql
...
PDO は PHP 拡張フレームワークに基づいて実装されており、そのソース コードは PHP ソース コード ディレクトリの ext/pdo にあります
PDO は単なるインターフェイス仕様であることを再度強調します。それ自体ではデータベース機能を実装するものではありません。プログラマは、特定のデータベースにアクセスするために、特定のデータベースの「PDO ドライバー」を使用する必要があります。
拡張子=php_pdo_mysql.dll
コードをコピー
$dbhost="ローカルホスト";
$dbname="会社";
$dbusr="ルート";
$dbpwd="111";
$dbhdl=NULL;
$dbstm=NULL;
$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',);
$dsn='mysql:host=' . $dbhost=';port=3306;dbname=' 。
試してみる
{
$dbhdl = 新しい PDO($dsn, $dbusr, $dbpwd, $opt);
//例外を表示します
$dbhdl->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}
キャッチ (PDOExceptsddttrtion $e)
{
// PDOException を返す
印刷�エラー!:�。
死ね();
}
$dbstm = $dbhdl->query('SELECT * from p8_ad_user LIMIT 0,1');
$rows = $dbstm->fetchAll(PDO::FETCH_ASSOC);//$rows = $dbhdl->Fetch();
print_r($rows);
?>
复制幣
拡張子=php_pdo_pgsql.dll
复制幣
$host = "ローカルホスト";
$user = "root";
$pass = "111";
$db = "会社";
$cursor = "cr_123456";
試してみましょう
{
$dbh = 新しい PDO("pgsql:host=$host;port=5432;dbname=$db;user=$user;password=$pass");
}
catch (例外 $e)
{
echo "接続できません: " . $e->getMessage() ."
";
}
$dbh->beginTransaction();
$query = "SELECT * from p8_ad_user LIMIT 0,1";
$dbh->query($query);
$query = ""$cursor" 内のすべてを取得";
foreach ($dbh->query($query) as $row)
{
echo "$row[0] $row[1] $row[2] ";
}
echo "データ終了";
?>
复制幣
ここでは Mysql、PostGreSQL だけを例に挙げますが、実際のところ、PDO はこのような抽象層方式で現在の主流の大部分のデータベースを接続でき、PDO は PHP6 のデータベース接続方式になる予定です。
http://www.php.net/manual/zh/book.pdo.php
0x3: ODBC 抽象層とデータテーブル通信を使用します
ODBC は、特定のデータソース (MS Access データ库など) に接続できるアプリケーションプログラムインターフェイス (API) です
グラフは、機能や構成などの接続方法を、プロシージャ言語およびデータベース認証 (SQL 標準化) によって標準化します。
ODBC の機能は、二重の重み付けを備えた接続または接続です。
1. まず、ODBC システムに適しているのは、プログラム言語システムです
2. 次に、データ ストレージ システムには ODBC システムが適しています。
したがって、ODBC には、「ODBC に対してはプログラム言語」の駆動プログラム (PHP-ODBC など) と、「データ記憶システムに対しては ODBC」の制御プログラム (MySQL-ODBC など) が必要です。 ODBC システム自体に加えて、ODBC はデータ ソースとプログラム ステートメントの間に存在するセキュリティを考慮してデータ ソースの構成を処理することもできます。
和前の学習 API インターフェイス、PDO とは異なりますが、ODBC 接続データベースを使用して、微麻烦一点 (少なくとも我个人这么觉得) を使用して、この「麻烦」体现在我们必要对目标データベースサーバーの操作システムを実行します。いくつかの配置、つまり、ODBC データソースを作成すると、ODBC 接続を実行できるようになります
MS Access データの ODBC 接続を構築する方法:
复制幣
1. 制御パネルで管理ツールを起動します
2. 双击その中のデータソース (ODBC) 画像标
3. 选择系DSN 选项卡
4. 点击系统 DSN 选项卡中の「追加」按钮
5. Microsoft Access ドライバーを選択します。ポイント完了
6. 次の界面、点击「选择」来定位データ库
7. このデータ库のためにデータソース名 (DSN) を 1 つ取得します
8. 点击确定
复制幣
コード:
复制幣
<ボディ>
//接続一ODBCデータソース、無帐号、秘密
$conn = odbc_connect('northwind', '', '');
if (!$conn)
{
exit("接続に失敗しました: " . $conn);
}
$sql = "SELECT * FROM p8_ad_user";
$rs = odbc_exec($conn, $sql);
if (!$rs)
{
exit("SQL エラー");
}
echo "
";
echo "
会社名 ";
echo "
連絡先名 ";
while (odbc_fetch_row($rs))
{
$username = odbc_result($rs, "ユーザー名");
$password = odbc_result($rs, "パスワード");
echo "
$username ";
echo "
$password ";
}
odbc_close($conn);
echo "
";
?>
ボディ>
コードをコピー
0x4: DBX を使用してデータベースと通信します
PHP 自体には DBX 関数が組み込まれています。DBX モジュールはデータベース抽象化レイヤーです (DBX の「X」は、サポートできるデータベースの X タイプを表します)。 DBX 関数を使用すると、DBX でサポートされているすべてのデータベースにアクセスできます。
DBX は次のデータベースをサポートします:
1.Mysql
2.ODBC
3.PgSQL
4.Mssql(Microsoft SQL Server)
5.Fbsql
ダウンロード:
http://pecl.php.net/package/dbx
http://rpmfind.net/linux/rpm2html/search.php?query=php-dbx
コード:
コードをコピー
PHP-DBX URL オーガナイザー
p、ul、td、h1、h2、h3
{
フォントファミリー: verdana、helvetica、sans-serif;
}
/*****
* この例のテーブル定義:
* テーブル URL を作成します (
* url VARCHAR(128) が null ではありません、
* 説明テキスト、
* 主キー (URL));
*****/
//$MODULE を DBX_MYSQL、DBX_MSSQL、DBX_PGSQL、またはサポートされているデータベースとして定義します
$MODULE = DBX_PGSQL;
$server = "ローカルホスト";
$user = "ルート";
$パスワード = "111";
$database = "会社";
/* 関数 */
関数 get_urls($dbconn, $sql)
{
$result = @dbx_query($dbconn, $sql);
if ( $result == 0 )
{
echo dbx_error($dbconn);
}
その他
{
$result;
}
}
関数 url($action, $dbconn, $url, $description)
{
if($action == "追加")
{
$sql = "URLS 値に挿入('$url', '$description')";
}
elseif($action == "削除")
{
$url = urldecode($url);
$sql = "URL = '$url' の URL から削除";
}
$result = @dbx_query($dbconn, $sql);
if ( $result == 0 )
{
echo "
URL 追加エラー: " dbx_error($dbconn);
}
その他
{
print("
$action : $url が成功しました!
");
}
}
/*** 主要 ***/
$dbconn = dbx_connect($MODULE, $server, $database, $user, $password) または die("データベースに接続できません");
?>
PHP DBX URL オーガナイザー
<フォーム action=dbx_urls.php メソッド=post>
URL: 説明:
if(isset($addurl))
{
url("add", $dbconn, $url, $description);
}
if(isset($delete))
{
url("削除", $dbconn, $delete, "");
}
$sql = "URL から * を選択";
$result = get_urls($dbconn, $sql);
if(sizeof($result->data) == 0)
{
?>
申し訳ありませんが、データベースに URL がありません。いくつか追加する必要があります。
}
その他
{
?>
for($i = 0; $i data); $i++)
{
?>