検索
ホームページphp教程php手册PEAR: 中間データベース アプリケーション レイヤ 2 の作成

作成|データ|データベース

function errorMessage($dbcode)
DB エラー テキスト メッセージを返します。

function &raiseError($code = DB_ERROR, $mode = false, $level = false,$debuginfo = false, $nativecode = false)
エラーをスローします。この関数はDBから呼び出されます。

function setFetchMode($fetchmode)
デフォルトのフェッチモードを設定します。

fetchmod には以下のタイプがあります:
DB_FETCHMODE_DEFAULT: デフォルトモードを使用します。
DB_FETCHMODE_ORDERED: 各レコードのデータ列は、0 から始まる数値インデックスを使用します。
DB_FETCHMODE_ASSOC: 各レコードのデータ列は、フィールド名インデックスを使用します。クエリ内のフィールド名は一貫しています
DB_FETCHMODE_FLIPPED: 結果セットが複数のレコードと複数のフィールドを含む多次元の場合、通常、最初の次元はレコード番号であり、どのレコードであるかを示します。フィールド名または数値インデックスとして 2 次元配列が使用されます。 DB_FETCHMODE_FLIPPED はこの順序を交換します。つまり、最初の層はフィールド名、2 番目の次元はレコード番号です。

function setOption($option, $value)
バックエンド データベース オプションを設定します。 $options と $value は、それぞれオプション名と対応する値です。

通常、この関数はDB_Commonとそのサブクラスの構築関数内で呼び出されます。

function getOption($option)
オプションの値を取得する

function prepare($query)
execute() のクエリをコンパイルする準備をします。一部のバックエンド データベースでは、これはエミュレーションによって実現されます。コンパイルされたクエリ ハンドルを返すか、エラーが発生した場合は DB_Error オブジェクトを返します。

functionexecute($stmt, $data = false)
コンパイルされたクエリを実行します。 $stmt は、prepare によって返されるハンドルです。 $data はパラメータ データです。パラメータ クエリを使用している場合、$data にはそれぞれの?が含まれます。パラメータ値

例:
/**
* 以下は、指定したユーザーの記事レコードを記事テーブルから削除する削除クエリを実行します
*/
$sql = "delete from artilce wherearticle.userid =$userid";
$qh = $db->prepare($ sql );
if(DB::isError($qh)){
return $qh;
}
$result = $db->e​​xecute($qh);
return $result;
?>



functionexecuteEmulateQuery($stmt, $data = false)
内部関数の準備と実行をシミュレートするときに使用する実際のクエリ文字列を返します。エラーが発生した場合は、DB_Error オブジェクトが返されます。

functionexecuteMultiple( $stmt, &$data )
同じクエリ ハンドルで複数のクエリを実行します。 $data は 0 から始まる配列である必要があります。この関数は、配列内のデータの各行に対して順番に実行を呼び出します。この関数は通常、パラメータのクエリに使用されます。クエリを一度コンパイルし、さまざまなパラメータ値を $data 配列に入力して、クエリを同時に実行できます。クエリの 1 つでエラーが発生した場合、残りのクエリは続行されず、エラーが返されることに注意してください。

functionmodifyQuery($query)
バックエンドデータベースのクエリを変更するために使用される内部関数。バックエンドデータベースはこの関数を実装し、最適化および変更されたクエリ文字列を返します。例: これは DB_mysql の実装です。
functionmodifyQuery($query)
{
if ($this->options['optimize'] == 'portability') {
"DELETE FROM table " mysqlで影響を受けた行を与えます。クエリが成功すると、結果セットのあるクエリの場合は DB_Result オブジェクトが返され、結果セットのないクエリがある場合は DB_OK が返されます。

エラーが発生した場合はDB_Errorオブジェクトが返されます。

function &getOne($query, $params = array())
クエリを実行し、結果セットの最初の行と最初の列のデータを返します。 $params はパラメータ値です。バックエンド データベースがサポートしている場合は、これらのパラメータを使用するために prepare/execute が呼び出されます。

例:
$sql = "userid= $userid orderby date の記事から id,date を選択";
$last = $db->getOne($sql);
if(DB::isError($last)){
echo "エラー: ".DB::errorMessage($last);
}
echo "id:".$last;
?>



function &getRow($query, $fetchmode = DB_FETCHMODE_DEFAULT, $params = array() )
クエリを実行し、結果セットの最初のレコードを返してください。

$fetchmod はフェッチモードを指定します。省略した場合は、デフォルトのモードが使用されます。

例:
$sql = "select * from items order by date desc";
$row = $db->getRow($sql);
if(DB::isError($row) ){
echo "Error:".DB::errorMessage($row);
}
for($i=0;$i echo "

$row[ $i]";
}

?>



function &getCol($query, $col = 0, $params = array())
クエリを実行し、指定されたフィールドを返します。結果セット 列値の配列

$col は返される列のインデックスであり、整数またはキー フィールド名にすることができます

例:
$sql = "select id,userid。 ,date from items order by date desc limit 100";
//ユーザーリストのみを返します
$row = $db->getCol($sql,1);
if(DB::isError($row)){
echo "エラー :".DB::errorMessage($row);
}

for($i=0;$i echo "$row[$ i]";
}

?>



function &getAssoc($query, $force_array = false, $params = array())
クエリを実行し、連想配列を返します。 $force_arry 強制的に配列を返します。 true の場合、結果セットにフィールドが 2 つしかない場合でも、キー フィールドに対応する値は要素が 1 つだけの配列になります。 false の場合、キー フィールドに対応する値は次のようになります。この関連付けられた配列は少し特殊であることに注意してください:
"Select Userid, name, reg_date from user" をクエリすると、レコード セットは次のようになります:
Userid Name Reg_date
test Testor 2001-07-05Test2 Teest2 2001-07 -06
その後、返される配列は次のようになります:
array( 'test' => array('testor','2001-0705'),
'test2'=> array('teest2','2001-07 -06 '
)

例:

$sql = "ユーザー制限 100 からユーザー ID、名前、登録日、最終ログインを選択";
$userinfo = $db->getAssoc($sql);
if( DB::isError($userinfo)){
die "エラー! ".DB::errorMessage($userinfo);
}
if(empty($userinfo)){
echo "warning:NO users!";
return;
}
/*userinfo にはユーザー情報が含まれています */
function getUserInfo($user_id=''){
$info = $userinfo[$user_id];
if (empty($info){
echo "そのようなユーザー情報はありません!";
}
return $info;
}
?>



function &getAll($query, $fetchmode = DB_FETCHMODE_DEFAULT, $params = array())
結果セット内のすべてのレコードを含む配列を返します。注意: 結果セットが次の場合はこれを使用しないでください。この関数。

例:
$sql ="select * from users limit 1000";
$list = $db->getAll($sql);
if(DB::isError( $list )){
die "データベースエラー:".DB::errorMessage($list);
}
for ($i=0;$i $user = $ list[ $ i]; h echo "& lt; troc & gt;"
for ($ j = 0; $ j & lt; count ($ user); $ j ++) {
echo "& lt; td & gt;". $ user [$ j].. "";
}
echo "";
_

関数 commit() はサポートされていません。
現在のトランザクションをコミットします

関数 rollback()
現在のトランザクションをロールバックする

関数 numRows($result)
結果セット内のレコード数を返す

関数affectedRows()
前のクエリを返す 操作されたレコードの数

関数 nextId($ seq_name、$ondemand = true)
指定されたシーケンスの次の値を返す

関数 createSequence($seq_name)
シーケンスを作成する

関数 dropSequence($seq_name)
シーケンスを削除する


5. したがって、さらに進んで、独自の中間データベース アプリケーション層を作成します
, DB クラスの機能についての理解が深まりました。 DB クラスに基づいて独自のデータベース アプリケーション層を作成できます。もしかしたら、なぜ新しいクラスを作成する必要があるのか​​と疑問に思われるかもしれません。アプリケーションで DB を直接使用するのは良いことではないのですか?答えはもちろんですが、お勧めしません。

まず第一に、DB は非常に強力ですが、クラスはアプリケーション指向である必要があります。データベース層は、必要のない機能を保護する必要があります。同時に、アプリケーションがデータベースに接続してリソースを解放しないようにする必要があります。その後、これらのタスクはクラスによって完了されます。

第二に、DB にはまだいくつかの欠陥があります。それよりも優れたものを見つけたら、すぐにアップグレードできます。変更する必要があるのは、このクラスのメソッドの実装方法だけであり、アプリケーションの他のモジュールは影響を受けません。

独自のクラスを設計するときは、次のガイドラインに従っていただければ幸いです:

基本的な無料のクエリ インターフェイスを提供します。クエリと実行が含まれます。これらは、それぞれ結果セットのあるクエリと結果セットのないクエリに対応します。
特定のデータベースの特定の機能は、コード サイズが増加する場合でも使用しないでください。
データベースへの接続、リソースの解放など、データベース操作の詳細の一部を保護するようにしてください。
6. DB の欠点
上記では、DB の利点とその使用方法とテクニックについて説明しました。しかし、完璧なものはありません。特に DB クラスは開発期間が長くないため、DB は最終的に完成するわけではなく、使用中に多かれ少なかれバグや設計上の問題を発見して修正する必要があります。 。

MYSQL の問題
質問 1: 以前プロジェクトを開発していたときに、DB の MYSQL クラスに問題があることに気づきました。つまり、接続すると、MYSQL クラスが現在のデータベースを $ のデータベース名に自動的に設定します。 DSN。今後クエリを使用する場合は、現在のデータベースが使用されます。以下は元の接続コードです:
if ($dsninfo["database"]) {
if (!mysql_select_db($dsninfo["database"], $conn)) {
if ($dsninfo["database"]) return $this->raiseError(); / / Testが私のメインデータベースですが、最初のデータベースのユーザーからユーザー情報を取得し、ユーザーの権限情報をtestに保存したいと考えています。この目的のために、データベース層を実装するために中間クラス CV_DB を作成しました。 CV_DB の作成関数では、指定したデータベースに接続するので、次のように使用できます:

$db1 = new CV("user");

$db2 = new CV("test");

その後実行したところ、あるユーザーの情報を問い合わせたところ「テーブルが存在しません」というDBエラーが発生しました。しかし、実際にはこのテーブルは存在します。最後に、DB/mysql.php に問題があることがわかりました。そのクエリでは、mysql_db_query ではなく mysql_query が使用されていました。このとき、実行すると、MYSQL の現在のデータベースが 2 番目のデータベースになりました。最初のデータベースに対するクエリでは、当然エラーが発生します。

解決策は 2 つあります。CV の作成時にデータベースに接続しない、クエリ時に接続する、クエリの完了後に切断します。または、DB/Mysql.php を変更します。私は後者を選択し、上記の行をコメントアウトして、SimpleQuery の mysql_query を mysql_db_query に置き換えました。

問題 2: mysql には実行がないため、DB_common のシミュレーション メソッドを継承しますが、残念ながら、これにより新たな問題が発生します。一部の更新クエリで、更新するデータに 2 つの特殊文字が含まれている場合、問題が発生します。これは、prepare がこれらの文字をパラメータ クエリの文字とみなして分析するため、データを更新できなくなります。

解決策は 2 つあります: 交換しますか?と & ですが、考慮すべきことがたくさんあります。または: simpleQuery を使用するか、直接クエリを実行します。

私が後者を選択したのは、他のクラスが中間データベース アプリケーション クラスである CV のみを処理するためです。そのため、バックエンド データベースが mysql の場合は、それを直接 simpleQuery として呼び出します。それ以外の場合は、バックエンド データベースの準備と実行を呼び出します。このようにして、実際のバックエンド データベースはプロジェクト内の他のアプリケーション クラスに対して透過的になるため、対応する調整を簡単に行うことができます。これはデータベース アプリケーション層を設計する当初の目的でもあります。

DBの開発状況
DB は現在も継続的に開発中です。DB/ の下に STATUS ファイルがあり、DB クラスの機能と各バックエンド データベースの実装が説明されています。以下はリリースにおける PHP4.0.6 の開発状況です。 x" - 実装されていますが、テストは実装されていませんが、テストはありません
"t" - 実装されていますが、1 つ以上のテストは失敗します 実装されますが、1 つ以上のテストは実装に失敗し、すべてのテストに合格します
"e" - エミュレートされた実装、エミュレートされたテストはありません、テストなし
「E」 - エミュレートされた実装、エミュレートされ、すべてのテストに合格
「n」 - 「機能なし」を返します、この機能を提供する機能はありません
" -" -to は FBSQL IFX MSSQL OCI8 を実装しませんでしたPGSQL
機能 | Sybase
simplequery X X X T T x T x inumro WS x e x e e T e e
シーケンスs x n n n 自動コミット
tableInfo x n n n Pan Fan (Night Sailer) : 北京賽迪データ有限公司エンジニア彼の主な研究対象は、Perl、PHP、および XML のアプリケーション、PHP の MVC 開発モデル、および PERL-GTK の使用です。 nightsailer@hotmail.com まで連絡してください。









声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
解决方法:您的组织要求您更改 PIN 码解决方法:您的组织要求您更改 PIN 码Oct 04, 2023 pm 05:45 PM

“你的组织要求你更改PIN消息”将显示在登录屏幕上。当在使用基于组织的帐户设置的电脑上达到PIN过期限制时,就会发生这种情况,在该电脑上,他们可以控制个人设备。但是,如果您使用个人帐户设置了Windows,则理想情况下不应显示错误消息。虽然情况并非总是如此。大多数遇到错误的用户使用个人帐户报告。为什么我的组织要求我在Windows11上更改我的PIN?可能是您的帐户与组织相关联,您的主要方法应该是验证这一点。联系域管理员会有所帮助!此外,配置错误的本地策略设置或不正确的注册表项也可能导致错误。即

Windows 11 上调整窗口边框设置的方法:更改颜色和大小Windows 11 上调整窗口边框设置的方法:更改颜色和大小Sep 22, 2023 am 11:37 AM

Windows11将清新优雅的设计带到了最前沿;现代界面允许您个性化和更改最精细的细节,例如窗口边框。在本指南中,我们将讨论分步说明,以帮助您在Windows操作系统中创建反映您的风格的环境。如何更改窗口边框设置?按+打开“设置”应用。WindowsI转到个性化,然后单击颜色设置。颜色更改窗口边框设置窗口11“宽度=”643“高度=”500“>找到在标题栏和窗口边框上显示强调色选项,然后切换它旁边的开关。若要在“开始”菜单和任务栏上显示主题色,请打开“在开始”菜单和任务栏上显示主题

如何在 Windows 11 上更改标题栏颜色?如何在 Windows 11 上更改标题栏颜色?Sep 14, 2023 pm 03:33 PM

默认情况下,Windows11上的标题栏颜色取决于您选择的深色/浅色主题。但是,您可以将其更改为所需的任何颜色。在本指南中,我们将讨论三种方法的分步说明,以更改它并个性化您的桌面体验,使其具有视觉吸引力。是否可以更改活动和非活动窗口的标题栏颜色?是的,您可以使用“设置”应用更改活动窗口的标题栏颜色,也可以使用注册表编辑器更改非活动窗口的标题栏颜色。若要了解这些步骤,请转到下一部分。如何在Windows11中更改标题栏的颜色?1.使用“设置”应用按+打开设置窗口。WindowsI前往“个性化”,然

OOBELANGUAGE错误Windows 11 / 10修复中出现问题的问题OOBELANGUAGE错误Windows 11 / 10修复中出现问题的问题Jul 16, 2023 pm 03:29 PM

您是否在Windows安装程序页面上看到“出现问题”以及“OOBELANGUAGE”语句?Windows的安装有时会因此类错误而停止。OOBE表示开箱即用的体验。正如错误提示所表示的那样,这是与OOBE语言选择相关的问题。没有什么可担心的,你可以通过OOBE屏幕本身的漂亮注册表编辑来解决这个问题。快速修复–1.单击OOBE应用底部的“重试”按钮。这将继续进行该过程,而不会再打嗝。2.使用电源按钮强制关闭系统。系统重新启动后,OOBE应继续。3.断开系统与互联网的连接。在脱机模式下完成OOBE的所

Windows 11 上启用或禁用任务栏缩略图预览的方法Windows 11 上启用或禁用任务栏缩略图预览的方法Sep 15, 2023 pm 03:57 PM

任务栏缩略图可能很有趣,但它们也可能分散注意力或烦人。考虑到您将鼠标悬停在该区域的频率,您可能无意中关闭了重要窗口几次。另一个缺点是它使用更多的系统资源,因此,如果您一直在寻找一种提高资源效率的方法,我们将向您展示如何禁用它。不过,如果您的硬件规格可以处理它并且您喜欢预览版,则可以启用它。如何在Windows11中启用任务栏缩略图预览?1.使用“设置”应用点击键并单击设置。Windows单击系统,然后选择关于。点击高级系统设置。导航到“高级”选项卡,然后选择“性能”下的“设置”。在“视觉效果”选

Windows 11 上的显示缩放比例调整指南Windows 11 上的显示缩放比例调整指南Sep 19, 2023 pm 06:45 PM

在Windows11上的显示缩放方面,我们都有不同的偏好。有些人喜欢大图标,有些人喜欢小图标。但是,我们都同意拥有正确的缩放比例很重要。字体缩放不良或图像过度缩放可能是工作时真正的生产力杀手,因此您需要知道如何对其进行自定义以充分利用系统功能。自定义缩放的优点:对于难以阅读屏幕上的文本的人来说,这是一个有用的功能。它可以帮助您一次在屏幕上查看更多内容。您可以创建仅适用于某些监视器和应用程序的自定义扩展配置文件。可以帮助提高低端硬件的性能。它使您可以更好地控制屏幕上的内容。如何在Windows11

10种在 Windows 11 上调整亮度的方法10种在 Windows 11 上调整亮度的方法Dec 18, 2023 pm 02:21 PM

屏幕亮度是使用现代计算设备不可或缺的一部分,尤其是当您长时间注视屏幕时。它可以帮助您减轻眼睛疲劳,提高易读性,并轻松有效地查看内容。但是,根据您的设置,有时很难管理亮度,尤其是在具有新UI更改的Windows11上。如果您在调整亮度时遇到问题,以下是在Windows11上管理亮度的所有方法。如何在Windows11上更改亮度[10种方式解释]单显示器用户可以使用以下方法在Windows11上调整亮度。这包括使用单个显示器的台式机系统以及笔记本电脑。让我们开始吧。方法1:使用操作中心操作中心是访问

如何在Safari中关闭iPhone的隐私浏览身份验证?如何在Safari中关闭iPhone的隐私浏览身份验证?Nov 29, 2023 pm 11:21 PM

在iOS17中,Apple为其移动操作系统引入了几项新的隐私和安全功能,其中之一是能够要求对Safari中的隐私浏览选项卡进行二次身份验证。以下是它的工作原理以及如何将其关闭。在运行iOS17或iPadOS17的iPhone或iPad上,如果您在Safari浏览器中打开了任何“无痕浏览”标签页,然后退出会话或App,Apple的浏览器现在需要面容ID/触控ID认证或密码才能再次访问它们。换句话说,如果有人在解锁您的iPhone或iPad时拿到了它,他们仍然无法在不知道您的密码的情况下查看您的隐私

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。