PHP+Oracle(OCI) 初步
从Oracle(OCI)开始
在越来越多的PHP用户选择Oracle作为他们的数据库的情况下,如何访问PHP发布环境下的Oracle接口变的越发的重要了。我们将从快速的浏览一个简单基本且是更加明确的Oracle 的情况开始我们的旅程。Oralce 和Oralce8 使用PHP的OCI8 函数库。在PHP手册里有简要的说明(http://www.php.net/manual/ref.oci8.php): 这些函数允许你访问Oracle 和 Oracle7d 的数据库,它们使用的是Oracle8 Call-Interface(OCI8)。你将需要Oracle8 的客户端函数库来使用这些扩展功能。
这些扩展功能比起标准的Oracle扩展功能来更加的灵活,它支持PHP全局及本地变量及与Oracle的连编,有完整的LOB,FILE及ROWID的支持并且允许你定义用户补充变量。
从这里开始,我将使用“Oracle”指代任何Oracle版本,这篇文章假定你已经安装并运行了PHP和Oracle。而Oracle的帮助可以在http://www.oracle.com 或者 http://technet.oracle.com 找到。
本文的观点是
1.连接到ORALCLE
2.建立并运行SQL语句
3.显示结果
4.限制/偏移量 接近“标记页数”的结果
作为一个附加的功能。你可以看看如何完成显示一个从很大的数据结果得出的限制/偏移量的查询。
/*我们将从一个基础的使用显示一个方案。在这个例子里使用的文件是由Rod Kreisler编写的新版本的文章(http://www.phpbuilder.com/columns/rod20000221.php3)。新版本的文件可以在http://php.socket7.net 找到。把$offset设置为0,如果被设置为0或者空的话。
*/
if (empty($offset) || $offset $offset=0;
}
/*我们将从一个基础的使用显示一个方案。在这个例子里使用的文件是由Rod Kreisler编写的新版本的文章(http://www.phpbuilder.com/columns/rod20000221.php3)。新版本的文件可以在http://php.socket7.net 找到。把$offset设置为0,如果被设置为0或者空的话。
*/
if (empty($offset) || $offset $offset=0;
}
$limit = 3;
/*
连接到Oralce,如果你愿意的话,可以在连接数据库的时候直接使用ORACLE_SID。使用PHP作为CGI使用非连续的连接,现在让我们在这个例子里使用这种非连续的连接。在windows里这个可以在注册表里设置,而在unix里你可以使用 putenv()函数putenv(“ORALCE_SID=ORASID”);
或者 ,如果你愿意,你可以在连接数据库的时候直接参考你的ORACLE_SID,让我们在这个例子里直接参考ORACLE_SID。
如果你使用PHP作为APACHE的模块的话,你可以使用持续连接。而使用非持续连接在使用PHP时作为CGI时,我们在这个例子里使用非持续连接。
*/
$conn = OCILogon("user_name", "password", "ORASID");
/*
错误提示。在没有数据库被连接的情况下,将会显示的错误信息并且退出脚本的执行。
*/
if (!$conn) {
echo "
ERROR - Could not connect to Oracle
";exit;
}
/*
如果连接成功,$conn就是一个连接符。否则,脚本将结束并且输出“Could not connect to Oracle”的错误信息
现在开始来分析并且创建你的SQL语句,由无限制的查询结果得到可以记数的记录。
在这里的格式语句“Select count(*) from table_name”相当于count(),是个SQL函数将会在数据库里执行。比由依靠PHP计算得到的返回结果要好。
*/
$sql = "Select count(*) from table_name";
$stmt = OCIParse($conn, $sql);
if(!$stmt) {
echo "
ERROR - Could not parse SQL statement.
";exit;
}
/*
如果你输入了一个错误的SQL语句或者出现了另一个错误,你将看到“无法分析SQL”的错误提示,$stmt现在就是一个定义语句。
现在执行你的分析语句
*/
OCIExecute($stmt);
/*
语句现在已经被执行了,但是正如你所看到的,没有结果标志符从OCIExecute()返回,由OCIParse()返回的结果包含了所有Oracle所需要的信息。
现在开始选择这个查询的结果,$total rows[0]将会包含一个数。如果没有行被返回,则显示错误并退出脚本的运行。
*/
OCIFetchInto($stmt, &$total_rows);
if ( !$total_rows[0] ) {
echo "
Error - no rows returned!
";exit;
}
/*
这段代码是可选择的但将会使返回的结果更清楚,显示一个类似于“总共有15条记录,现在显示的是第4条到第15条结果。”的注释
*/
$begin =($offset+1);
$end = ($begin+($limit-1));
if ($end > $total_rows[0]) {
$end = $total_rows[0];
}
echo "There are $total_rows[0] results.
n";
echo "Now showing results $begin to $end.
n";
/*
现在是言归正传的时候了,释放原先的语句标识然后建立SQL语句.分析并执行SQL语句,
写代码时需注意:不同于MYSQL,Oracle在SQL语句中不支持限制语句。就本身而言,有很多方法选择特定的行,最好的方法是把选择的结果放在一个临时表里或者“缓冲“所有的结果。这样的方法已经超出了这篇教程的范围了。我们将使用一个更简单的方法,在下面将进一步的解释。
*/
OCIFreeStatement($stmt);
$sql = "Select * from table_name";
$stmt = OCIParse($conn, $sql);
if(!$stmt) {
echo "
ERROR - Could not parse SQL statement.
";exit;
}
OCIExecute($stmt);
/*
现在显示结果。最简单的做法是在结果集合中使用这个循环。HTML将用来显示最终的结果,但是这个范例非常的简单,所以我们一个也不会用。
编写代码时注意:如上述规定的,在Oracle里是无法限制的,所以我们必须通过在全部的结果集取出我们想要的和终止我们已经有的结果来做这个循环。
在这一小节里,我们将会有几种不同的方法,实际上应该有更好的方法来写这个代码。但是我认为我的这种方法不太容易读懂,它确实运行有效。
*/
$i=0;
$j=0;
while( OCIFetchInto($stmt, &$result_array) ) {
if ($i>=$offset) {
if ($j for ($k=0; $kecho $result_array[$k]." ";
}
echo "
";
$j++;
}
}
$i++;
}
echo "
";
/*
结果将显示在当前的页面里,现在是给访问者一个使用NEXT/PREV点击到其他页面的时候了
*/
// 计算结果所需的页面数,
$pages = intval($total_rows[0]/$limit);
// $pages 现在是除剩余的部分外总共所需的页面数
if ($total_rows[0]%$limit) {
// has remainder so add one page
$pages++;
}
//在显示的是第一页时不显示PREV的连接
if ($offset!=0) {
$prevoffset=$offset-$limit;
echo "

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

AWRレポートは、データベースのパフォーマンスとアクティビティスナップショットを表示するレポートです。解釈の手順には、アクティビティスナップショットの日付と時刻の識別が含まれます。アクティビティとリソース消費の概要をご覧ください。セッションのアクティビティを分析して、セッションの種類、リソース消費、待機イベントを見つけます。遅いSQLステートメント、リソース競合、I/Oの問題などの潜在的なパフォーマンスボトルネックを見つけます。待機イベントを表示し、パフォーマンスのためにそれらを特定して解決します。ラッチとメモリの使用パターンを分析して、パフォーマンスの問題を引き起こしているメモリの問題を特定します。

SQLステートメントは、Oracleの動的SQLを使用して、ランタイム入力に基づいて作成および実行できます。手順には、次のものが含まれます。動的に生成されたSQLステートメントを保存するための空の文字列変数を準備します。 executeを即座に使用するか、ステートメントを準備して、動的なSQLステートメントをコンパイルおよび実行します。バインド変数を使用して、ユーザー入力またはその他の動的値を動的SQLに渡します。実行するか、実行するか、動的SQLステートメントを実行します。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

Oracleのトリガーは、特定のイベント(挿入、更新、または削除)後に操作を自動的に実行するために使用されるストアドプロシージャです。これらは、データ検証、監査、データメンテナンスなど、さまざまなシナリオで使用されています。トリガーを作成するときは、トリガー名、アソシエーションテーブル、トリガーイベント、トリガー時間を指定する必要があります。トリガーには2種類のタイプがあります。操作前にトリガーが起動され、後のトリガーが操作後に起動されます。たとえば、挿入前のトリガーは、挿入された行の年齢列が負でないことを保証します。

PHPコミュニティは、開発者の成長を支援するための豊富なリソースとサポートを提供します。 1)リソースには、公式のドキュメント、チュートリアル、ブログ、LaravelやSymfonyなどのオープンソースプロジェクトが含まれます。 2)StackOverFlow、Reddit、およびSlackチャネルを通じてサポートを取得できます。 3)開発動向は、RFCに従うことで学ぶことができます。 4)コミュニティへの統合は、積極的な参加、コード共有への貢献、および学習共有への貢献を通じて達成できます。
